gpt4 book ai didi

java - 将字符与代码点进行比较?

转载 作者:IT老高 更新时间:2023-10-28 20:57:58 24 4
gpt4 key购买 nike

将代码点与 Java 字符进行比较的“正确”方式是什么?例如:

int codepoint = String.codePointAt(0);
char token = '\n';

我知道我可能可以做到:

if (codepoint==(int) token)
{ ... }

但是这段代码看起来很脆弱。是否有将 codepointschars 进行比较的正式 API 方法,或将 char 转换为 codepoint 进行比较?

最佳答案

一点背景知识:1995年Java出现时,char类型是基于原来的“Unicode 88”规范,限制为16位。一年后,当 Unicode 2.0 实现时,引入了代理字符的概念,超越了 16 位的限制。

Java 在内部以 UTF-16 格式表示所有 String。对于超过 U+FFFF 的代码点,代码点由代理对表示,即两个 char,第一个是高代理代码单元,(在\uD800-\uDBFF 范围内) ,第二个是低代理代码单元(在\uDC00-\uDFFF 范围内)。

从早期开始,所有基本 Character 方法都基于一个代码点可以用一个 char 表示的假设,所以这就是方法签名的样子.我猜想是为了保留在 Unicode 2.0 出现时没有改变的向后兼容性,并且在处理它们时需要小心。引用 Java documentation :

  • 只接受 char 值的方法不支持增补字符。它们将代理范围中的 char 值视为未定义字符。例如,Character.isLetter('\uD840') 返回 false,即使此特定值后跟字符串中的任何低代理值将表示一个字母。
  • 接受 int 值的方法支持所有 Unicode 字符,包括补充字符。例如,Character.isLetter(0x2F81A) 返回 true,因为代码点值表示一个字母(CJK 表意文字)。

char 转换为 int,就像您在示例中所做的那样,但效果很好。

关于java - 将字符与代码点进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1029897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com