发布网友 发布时间:2023-07-22 10:03
共2个回答
热心网友 时间:2023-09-14 10:54
int index=greeting.offsetByCodePoints(0,i);//这里是0不是o,以码位偏移值计算出位置,多数情况只是简单的加法。追答你需要先理解unicode和码位是什么。
码位是字符在编码表中的位置。比如在ASCII编码中字符'A'是的位置65,码位就是65
还有一个概念“机内码”,即字符在存储时的字节形式值。ASCII码只有128个字符,码位和机内码是一致的。但unicode有近10.9万字符,他的机内码就和码位不同,有utf8,utf16,usc2, utf32等等多种。而所有unicode的码位是一致的。
offsetByCodePoints //根据码位的偏移量 计算 字符串的局*度
codePointAt //获得指定java字符位置的码位
codePointCount //以码位统计字符的数量
Java的字符char和字符串String本身使用了unicode的早期/古代版本2.0(和unicode有一定的兼容性,有96.9%的相似性)但已经不符合现行unicode标准。现行unicode标准是5.0和6.0.
所以,当需要严格符合现行unicode标准的字符操作时,你就要用到码位相关的方法。
比如,对xml/html的文本进行解析转义时。需要写& #xA3B2;或\u+30202这种转义时,都会需要填入码位。
热心网友 时间:2023-09-14 10:54
说得很详细,看看