为什么string.indexOf方法的参数在Java中是int

为什么string.indexOf方法的参数在Java中是int,第1张

为什么string.indexOf方法的参数在Java中是int

真正
原因是,

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代码组成,则该方法仍然有效。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5133394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存