的 真正
原因是,
indexOf(int)预计一个Unipre码点,而不是16位UTF-16“字符”。Unipre代码点的长度实际上最多为21位。
(较长代码点的UTF-16表示实际上是2个16位“字符”值。这些值分别称为前导和尾随替代;从D800 16到DBFF 16以及从DC00 16到DFFF
16;请参阅Unipre FAQ-UTF
-8,UTF-16,UTF-32和BOM,以获取详细信息。)
如果您提供
indexOf(int)的代码点> 65535,它将搜索 一对 编码该代码点的UTF-16字符。
这是由javadoc声明的(虽然不是很清楚),对代码的检查表明这确实是方法的实现方式。
为什么不只使用16位字符?
这很明显。如果这样做的话,将没有一种简单的方法来在字符串中定位大于65535的代码点。对于那些开发可能包含文本代码点的国际化应用程序的人来说,这将是一个主要问题。(许多所谓的国际化应用程序都错误地假设a
char代表代码点。通常并不重要,但越来越多地这样做了。)
但这对您没有任何影响。如果您的字符串仅由16位代码组成,或者仅由ASCII代码组成,则该方法仍然有效。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)