在博文: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个代码点啊。不理解,请大侠们指点。谢谢。

解决方案 »

  1.   


    Java啊,我看《Java核心技术》时,对Java字符串中的代码点的概念不是很清楚,就百度到了问题中的那篇博文。
      

  2.   


    地址是这个,我试了下,可以打开的。
    http://blog.163.com/jianhuren2005@126/blog/static/1715817120079710424106/
      

  3.   

    http://blog.csdn.net/weizhaozhe/article/details/3909079
      

  4.   

    Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴
      

  5.   


    isSupplementaryCodePoint为ture,应该是说这个代码点是“增补字符”,需要由两个代码单元(16bit的char)存储。但i是代码点索引,如果i += 2,而while的条件是i <= 代码点个数,那就不对了吧。岂不是最终遍历的代码点个数不足codePointNum个?
    while (i <= codePointNum)看来这个问题是冷门啊。没有多少人回答。或者这个东西在实际应用中极少使用到。先放在这吧。继续向后面看书了。