Java 中的 Character.isAlphabetic 和 Character.isLetter 有什么区别?

2022-08-31 21:03:44

Java 中的 Character.isAlphabetic() 和 Character.isLetter() 有什么区别?什么时候应该使用一个,什么时候应该使用另一个?


答案 1

根据 API 文档,如果字符具有以下任何常规类别类型,isLetter() 将返回 true:UPPERCASE_LETTER (Lu)、LOWERCASE_LETTER (Ll)、TITLECASE_LETTER (Lt)、MODIFIER_LETTER (Lm)、OTHER_LETTER (Lo)。如果我们比较isAlphabetic(),它具有相同的但添加LETTER_NUMBER(Nl),以及任何具有Other_Alphabetic属性的字符。

这在实践中意味着什么?每个字母都是字母,但不是每个字母都是一个字母 - 在Java 7(使用Unicode 6.0.0)中,BMP中有824个字符是字母顺序的,但不是字母。一些例子包括0345(多调希腊语中使用的组合器),从05B0开始的希伯来语元音点(niqqud),在0610处的saw(“愿他平安”)的阿拉伯语敬语,阿拉伯语元音点......这个清单还在继续。

但基本上,对于英语文本,这种区别没有区别。对于其他一些语言,这种区别可能会有所不同,但很难提前预测在实践中可能有什么区别。如果可以选择,最好的答案可能是Letter() - 将来可以随时更改以允许其他字符,但是减少接受的字符集可能更难。


答案 2

推荐