package com.jt.test.redis;

import org.junit.Test;

/* 题目要求
* 编码:GBK,一个英文字符占一个字节,一个汉字占2个字节
* 随机给定一个字符串,例如:js3范ad啊asd
* 随机给定一个数字为截取字符串的长度,例如:6
* 根据给定的数字截取字符串,结果:js3范a
* 如果给定截取长度最后一个字符是英文,就直接截取,如上面的例子
* 如果给定截取长度最后一个是汉字,
* 若正好截取整个汉字,就直接输出,例如:“js3范ad啊asd”,截取5,则输出:“js3范”
* 若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”
*/
public class test { /* 我知道问题的答案,有一个点不明白,
* 现在的问题是不明白为什么 c==arr[3] 输出结果是false
* 一开始认为是 == 造成的地址问题
* 现在认为是byte转int造成的转码问题
*/
@Test
public void test() throws Exception { String str="js3范ad啊asd"; byte[] arr = str.getBytes("GBK"); // 变量里面存的都是补码
// byte: arr[3] 1011 1010
// 转成int: 1111 1111 1111 1111 1111 1111 1011 1010
// 强转char:1111 1111 1011 1010
char c=(char) arr[3];
System.out.println(c);
System.out.println((int)c); // 65463 源码:1111 1111 1011 1010 System.out.println(arr[3]); // -73 源码:1100 0101
// false, 比较的时候都转成int类型
// c :char转为int: 0000 0000 0000 0000 1111 1111 1011 1010
// arr[3]: byte转为int: 1111 1111 1111 1111 1111 1111 1011 1010
// 所以是false
System.out.println(c==arr[3]); // 所以是false System.out.println(); // 下面都明白
char d=(char) arr[1];
System.out.println((int)d);
System.out.println(d);
System.out.println(arr[1]);
System.out.println(d==arr[1]); // true }
}

若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”的更多相关文章

  1. Ubuntu 汉字显示一半的修复

    部分汉字(例如“复”)显示不正常,只显示一半,其原因是Ubuntu采用的字体Noto Sans CJK优先显示日文汉字,这一问题可以通过修改配置文件/etc/fonts/conf.avail/64-l ...

  2. C语言输出单个汉字字符

    #include "stdio.h" #include "windows.h" int main() { ] = { "多字节字符串!OK!" ...

  3. Oracle中对数字加汉字的排序

    需求:有一列NAME, varchar2类型,内容如下 以上就是已经按order by name进行排序的,但不是我们想要的结果 现在需要只按数字进行排序 第一步:抽取数字由于数字有是一位的有是两位的 ...

  4. 【转】Linux Framebuffer

    全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...

  5. Framebuffer原理、使用、测试系列文章,非常好的资料,大家一起学习

    转载:http://blog.csdn.net/tju355/article/details/6881372 *一.FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核 ...

  6. Java 第二章 变量、数据类型和运算符

    第二章      变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...

  7. 全面的framebuffer详解二

    转:http://blog.chinaunix.net/uid-28297667-id-3773729.html (二)一个LCD显示芯片的驱动实例 以Skeleton LCD 控制器驱动为例,在LI ...

  8. 关于FrameBuffer【转】

    本文转载自:http://blog.csdn.net/ganxingming/article/details/764482 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2. ...

  9. 全面的framebuffer详解

    一.FrameBuffer的原理    FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口.    Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIO ...

随机推荐

  1. sed 等相关的复习

    sed相打印两行之间的内容: sed -n '/111/,/aad/p' fuxi.txt grep -n ".*" fuxi.txt sed -n '2,9'p fuxi.txt ...

  2. Docker第一个应用:Hello World

    Docker应用:Hello World 前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg). ...

  3. EHCache学习

    EhCache 基础知识 吐嘈 clusteredShared的size会直接占用内存,而不是像redis那用动态的增大 clusteredDedicated能够动态增大,但是还是必须指定每个cach ...

  4. linux磁盘检测和修复

    显示磁盘和闪存的信息,以及分区信息 [root@bogon shell]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 s ...

  5. mysql不存在插入否则更新

    1.如果存在就更新,没有就插入,相当于三目运算 CREATE UNIQUE INDEX xxx ON t_msg_user_view(USER_ID); INSERT INTO xxx(user_id ...

  6. 普林斯顿数学指南(第二卷) (Timothy Gowers 著)

    第IV部分 数学的各个分支 IV.1 代数数 IV.2 解析数论 IV.3 计算数论 IV.4 代数几何 IV.5 算术几何 IV.6 代数拓扑 IV.7 微分拓扑 IV.8 模空间 IV.9 表示理 ...

  7. Javascript高级调试——console.table()

    原文:http://www.mariusschulz.com/2013/11/13/advanced-javascript-debugging-with-consoletable 本文只是简单翻译,部 ...

  8. 子序列匹配(search,find_end,search_n)

    search 版本一返回[first1,last1-(last2-first2)]中的第一个iterator i,使得满足对于[first2,last2)中的每个iterator j,*(i+(j-f ...

  9. 一道Linux 面试题

    一个文本文件info.txt的内容如下:aa,201zz,502bb,1ee,42每行都是按照逗号分隔,其中第二列都是数字,请对该文件按照第二列数字从大到小排列 答案:cat info.txt|awk ...

  10. 洛谷 2234 [HNOI2002]营业额统计——treap(入门)

    题目:https://www.luogu.org/problemnew/show/P2234 学习了一下 treap 的写法. 学习材料:https://blog.csdn.net/litble/ar ...