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

时间:2013-08-18 23:55:35

标签: java unicode

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

1 个答案:

答案 0 :(得分:37)

根据API docs,如果字符具有以下任何一般类别类型,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的阿拉伯敬语,如锯(“和平在他身上”),阿拉伯语元音点...列表继续。

但基本上,对于英文文本,区别没有区别。对于其他一些语言而言,区别可能有所不同,但很难预先预测实际差异。如果有一个选择,最好的答案可能是isLetter() - 可以随时更改以允许将来添加其他字符,但减少接受字符集可能会更难。