遍历字符串,并依次查看每个代码点
在博文:JAVA中的代码点与代码单元最后一段给出一段代码,用于:遍历字符串,并依次查看每个代码点
function void listCodePoint(String aString)
{
int codePointNum = aString.codePointCount(0,aString.length() - 1);
int i = 0;
while (i <= codePointNum)
{
int index = aString.offsetByCodePoint(0,i);
int cp = aString.codePointAt(index);
if (Charater.isSupplementaryCodePoint(cp))
i += 2;
else
i++;
}
}
我感觉这段代码是不是有问题?isSupplementaryCodePoint为增补字符时,i加2。
而while循环条件时i <= codePointNum,那不是最终少遍历了代码点吗?
在UTF-16中,增补字符是由2个代码单元组成,而不是2个代码点啊。不理解,请大侠们指点。谢谢。 --------------------编程问答-------------------- 有点意思,回去学习学习~ --------------------编程问答-------------------- --------------------编程问答-------------------- 这是什么语言写的? --------------------编程问答-------------------- 网站打不开。。 --------------------编程问答--------------------
Java啊,我看《Java核心技术》时,对Java字符串中的代码点的概念不是很清楚,就百度到了问题中的那篇博文。 --------------------编程问答--------------------
地址是这个,我试了下,可以打开的。
http://blog.163.com/jianhuren2005@126/blog/static/1715817120079710424106/ --------------------编程问答-------------------- http://blog.csdn.net/weizhaozhe/article/details/3909079 --------------------编程问答--------------------
谢谢,这篇文章我已经看过了。所以才觉得我问题中的那段代码有点问题。 --------------------编程问答-------------------- Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴 --------------------编程问答--------------------
isSupplementaryCodePoint为ture,应该是说这个代码点是“增补字符”,需要由两个代码单元(16bit的char)存储。
但i是代码点索引,如果i += 2,而while的条件是i <= 代码点个数,那就不对了吧。岂不是最终遍历的代码点个数不足codePointNum个?
while (i <= codePointNum)
看来这个问题是冷门啊。没有多少人回答。或者这个东西在实际应用中极少使用到。先放在这吧。继续向后面看书了。
补充:Java , Java SE