使用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

07-27 14:59