日期:2014-05-20  浏览次数:20726 次

String 类的代码点和代码单元是啥意思?
看书看出点问题,首先这两个名词没明白啥意思。

下面帖点书上没看懂的内容

String greeting = "Hello";
int n = greeting.length(); //从函数名字就可以看出函数的作用是返回字符串的长度,我运行了一下,确实是5

//然后书上又说:
要想得到实际的长度,即代码点的数量,可以调用:
int cpCount = greeting.codePointCount(0, greeting.length() );
//这我就不明白了,刚才那不是长度吗?这怎么又整个实际长度?

//接下来书上介绍了 charAt 函数。这个没啥问题,以前在C++中接触过类似的返回单个字符的函数。
//然后书上又说:
要想得到第 i 个代码点,应该使用下列语句
int index = greeting.offsetByCodePoints(0, i);
int cp = greeting.codePointAt(index);
//这最后给我输出个整数是什么玩意,这个整数是啥意思呢。好像和上面的 charAt 是一回事,但输出结果又不一样。


------解决方案--------------------
1、代码点:字符是最小文本单位,他的集合就是编码字符集,它为每一个字符分配一个唯一数字。而代码点就是指可用于编码字符集的数字。
(更具体的你可以到网上搜搜)

2、offsetByCodePoints后面的两个参数可以相加的,因为Unicode 最初设计是作为一种固定宽度的 16 位字符编码,不过后来出现越来越多稀奇古怪的字符,然后就扩大了,多的就叫增补字符。你的0也可以是其他数字。
(更底层的我也不知道了)

3、codePointAt(index);这个方法就蛮简单的了,返回对应字符的ascii值。

------解决方案--------------------
charAt是输出“字符”
codePointAt是输出“unicode码”(跟ascii码类似的东西)