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

Sim*_*ane 41 java unicode

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

Sim*_*ane 39

根据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的阿拉伯敬语,如锯("和平在他身上"),阿拉伯语元音点...列表继续.

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

  • @androiddeveloper:不,他们没有。例如,句点/句号 (U+002E) 具有通用类别 OTHER_PUNCTUATION (Po),它不是 isLetter() / isAlphabetic() 列出的通用类别之一,也不具有 Other_Alphabetic 属性。您提到的其他标点符号也是如此。 (3认同)
  • @androiddeveloper,我认为“用于句子的字符”是指标点符号吗?是的 isAlphabetic() 和 isLetter() 都排除了这些。 (2认同)