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

zhuyf87 2013-07-08 06:52:30
在博文: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个代码点啊。不理解,请大侠们指点。谢谢。
...全文
340 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuyf87 2013-07-09
  • 打赏
  • 举报
回复
引用 9 楼 qq1145174853 的回复:
Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴
isSupplementaryCodePoint为ture,应该是说这个代码点是“增补字符”,需要由两个代码单元(16bit的char)存储。 但i是代码点索引,如果i += 2,而while的条件是i <= 代码点个数,那就不对了吧。岂不是最终遍历的代码点个数不足codePointNum个? while (i <= codePointNum) 看来这个问题是冷门啊。没有多少人回答。或者这个东西在实际应用中极少使用到。先放在这吧。继续向后面看书了。
lkq_david 2013-07-09
  • 打赏
  • 举报
回复
Charater.isSupplementaryCodePoint(cp)返回ture是两代码点????咱也不是很清楚,是来求分滴
zhuyf87 2013-07-09
  • 打赏
  • 举报
回复
引用 7 楼 Acesidonu 的回复:
http://blog.csdn.net/weizhaozhe/article/details/3909079
谢谢,这篇文章我已经看过了。所以才觉得我问题中的那段代码有点问题。
Acesidonu 2013-07-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/weizhaozhe/article/details/3909079
zhuyf87 2013-07-09
  • 打赏
  • 举报
回复
引用 4 楼 oh_Maxy 的回复:
网站打不开。。
地址是这个,我试了下,可以打开的。 http://blog.163.com/jianhuren2005@126/blog/static/1715817120079710424106/
zhuyf87 2013-07-09
  • 打赏
  • 举报
回复
引用 3 楼 ghostkngiht 的回复:
这是什么语言写的?
Java啊,我看《Java核心技术》时,对Java字符串中的代码点的概念不是很清楚,就百度到了问题中的那篇博文。
oh_Maxy 2013-07-09
  • 打赏
  • 举报
回复
网站打不开。。
ghostkngiht 2013-07-09
  • 打赏
  • 举报
回复
这是什么语言写的?
zhuyf87 2013-07-09
  • 打赏
  • 举报
回复
oh_Maxy 2013-07-08
  • 打赏
  • 举报
回复
有点意思,回去学习学习~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧