使用String.offsetByCodePoints而不是仅使用整数索引来跟踪您在字符串中的位置有什么好处?
最佳答案
如果字符串包含Unicode补充平面中的字符(具有较高代码点/字符代码的不寻常字符),则可能会很有用。 Java字符串内部使用UTF-16编码,这意味着某些Unicode字符必须表示为两个char
值的序列,也称为代理对。因此,尽管s.charAt(i)
将为您提供char
的第i个s
,但实际上可能不是第i个字符。 s.offsetByCodePoints(0, i)
会告诉您第i个字符的起始索引。
如果您不熟悉上述某些术语,则应阅读Joel Spolsky's excellent article on character sets。