48

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

4

1 回答 1

44

根据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() - 将来可以随时更改以允许其他字符,但减少接受的字符集可能更难。

于 2013-08-18T23:55:34.670 回答