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. NYOJ 47:过河问题(思维)

    47-过河问题 内存限制:64MB 时间限制:1000ms 特判: No 通过数:6 提交数:10 难度:5 题目描述: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话 ...

  2. java-BigInteger类

    1.BigInteger类的概述和方法使用 * A:BigInteger的概述 * 可以让超过Integer范围内的数据进行运算 * B:构造方法 * public BigInteger(String ...

  3. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  4. day25scala

    PS:1.scala是开发spark平台的一种语言.2.如果开发spark的话,用scala开发是非常好的,Python的话一般,用java的话就是效果不好. -------------------- ...

  5. centos7安装的mysql无法启动(mysql daemon failed to start)

    不知道是什么原因,启动mysql时一直报这个错误,卸载重装mysql也没用 后来看到网上有人说,执行命令mysql_install_db就可以了 一试还真的行

  6. Tomcat三种项目部署方式

    第一种:直接将项目放在webapps目录下 材料:项目文件名hello,文件hello.html如图: 访问地址: 注释:hello  项目文件名 hello.html 访问的文件名字 第二种:修改c ...

  7. MySQL Innodb Engine -- 文件格式(innodb_file_format)

    ======================================================== 在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了 Compact 和 ...

  8. day5 python学习

    本日主要讲了列表的一些操作 1.列表的增 ret=['wang','taibai','alxe','ritian'] ret.append("wusir") print(ret) ...

  9. nginx http2 push 试用

    nginx 已经很早就支持http2,今天证书过期,重新申请了一个,同时测试下http2 的push 功能 环境准备 证书 这个结合自己的实际去申请,我使用免费的letsencrypt,支持泛域名证书 ...

  10. socket服务器编程的一般思路

    socket bind 创建一个listern线程 为每一个连接的client创建一个线程