当前位置:编程学习 > JAVA >>

遍历字符串,并依次查看每个代码点

在博文: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个代码点啊。不理解,请大侠们指点。谢谢。 --------------------编程问答-------------------- 有点意思,回去学习学习~ --------------------编程问答-------------------- --------------------编程问答-------------------- 这是什么语言写的? --------------------编程问答-------------------- 网站打不开。。 --------------------编程问答--------------------
引用 3 楼 ghostkngiht 的回复:
这是什么语言写的?


Java啊,我看《Java核心技术》时,对Java字符串中的代码点的概念不是很清楚,就百度到了问题中的那篇博文。 --------------------编程问答--------------------
引用 4 楼 oh_Maxy 的回复:
网站打不开。。


地址是这个,我试了下,可以打开的。
http://blog.163.com/jianhuren2005@126/blog/static/1715817120079710424106/ --------------------编程问答-------------------- http://blog.csdn.net/weizhaozhe/article/details/3909079 --------------------编程问答--------------------
引用 7 楼 Acesidonu 的回复:
http://blog.csdn.net/weizhaozhe/article/details/3909079


谢谢,这篇文章我已经看过了。所以才觉得我问题中的那段代码有点问题。 --------------------编程问答-------------------- Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴 --------------------编程问答--------------------
引用 9 楼 qq1145174853 的回复:
Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴


isSupplementaryCodePoint为ture,应该是说这个代码点是“增补字符”,需要由两个代码单元(16bit的char)存储。

但i是代码点索引,如果i += 2,而while的条件是i <= 代码点个数,那就不对了吧。岂不是最终遍历的代码点个数不足codePointNum个?
while (i <= codePointNum)

看来这个问题是冷门啊。没有多少人回答。或者这个东西在实际应用中极少使用到。先放在这吧。继续向后面看书了。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,