若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”
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”的更多相关文章
- Ubuntu 汉字显示一半的修复
部分汉字(例如“复”)显示不正常,只显示一半,其原因是Ubuntu采用的字体Noto Sans CJK优先显示日文汉字,这一问题可以通过修改配置文件/etc/fonts/conf.avail/64-l ...
- C语言输出单个汉字字符
#include "stdio.h" #include "windows.h" int main() { ] = { "多字节字符串!OK!" ...
- Oracle中对数字加汉字的排序
需求:有一列NAME, varchar2类型,内容如下 以上就是已经按order by name进行排序的,但不是我们想要的结果 现在需要只按数字进行排序 第一步:抽取数字由于数字有是一位的有是两位的 ...
- 【转】Linux Framebuffer
全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...
- Framebuffer原理、使用、测试系列文章,非常好的资料,大家一起学习
转载:http://blog.csdn.net/tju355/article/details/6881372 *一.FrameBuffer的原理* FrameBuffer 是出现在 2.2.xx 内核 ...
- Java 第二章 变量、数据类型和运算符
第二章 变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...
- 全面的framebuffer详解二
转:http://blog.chinaunix.net/uid-28297667-id-3773729.html (二)一个LCD显示芯片的驱动实例 以Skeleton LCD 控制器驱动为例,在LI ...
- 关于FrameBuffer【转】
本文转载自:http://blog.csdn.net/ganxingming/article/details/764482 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2. ...
- 全面的framebuffer详解
一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIO ...
随机推荐
- 铁三测试题——权限、你是管理员吗?——WP
权限 [题目描述]:你是管理员吗? [解题链接]:http://ctf4.shiyanbar.com/web/root/index.php 首先看题,提到“权限”,“管理员”,这就是说涉及到管理员的账 ...
- Go Example--函数多返回值
package main import "fmt" func main() { a,b := vals() fmt.Println(a) fmt.Println(b) } //函数 ...
- 【java多线程】线程状态分析
一.java线程的状态 NEW: 新建状态,线程对象已经创建,但尚未启动 RUNNABLE:就绪状态,可运行状态,调用了线程的start方法,已经在java虚拟机中执行,等待获取操作系统资源如CPU, ...
- Modern Data Lake with Minio : Part 1
转自:https://blog.minio.io/modern-data-lake-with-minio-part-1-716a49499533 Modern data lakes are now b ...
- Fundamentals of Computer Graphics 中文版(第二版) (Peter Shirley 著)
1 引言 2 数学知识 3 光栅算法 4 信号处理 5 线性代数 6 矩阵变换 7 观察 8 隐藏面消除 9 表面明暗处理 10 光线追踪 11 纹理映射 12 完整的图形流水线 13 图形学的数据结 ...
- python 通过pymongo操作mongoDB执行sort
在mongo shell 中对数据进行排序操作的时候 db.getCollection('ANJUKE_PRICE').find({},{'id':1,'_id':0}).sort({'id':1}) ...
- golang 原子操作函数
golang中的原子操作在sync/atomic package中. 下文以比较和交换操作函数为例,介绍其使用. CompareAndSwapInt32 比较和交换操作是原子性的. // Compar ...
- Go 并发控制--WaitGroup的使用
开发过程中,经常task之间的同步问题.例如,多个子task并发完成一部分任务,主task等待他们最后结束. 在Go语言,实现同步的一种方式就是WaitGroup. Example package m ...
- C/C++中带可变参数的函数
1.带可变参数的函数由来 当函数中的参数个数不确定时,这时候就需要带可变参数的函数! 如我们经常使用的C库函数printf()实际就是一个可变参数的函数, 其原型为: int printf( cons ...
- MAC JDK默认安装路径 JAVA路径
打开终端,执行 /usr/libexec/java_home -V 默认JDK1.6(Apple自带JDK)路径: /System/Library/Java/JavaVirtualMach ...