Подтвердить что ты не робот

В чем разница между Character.isAlphabetic и Character.isLetter в Java?

В чем разница между Character.isAlphabetic() и Character.isLetter() в Java? Когда следует использовать один и когда нужно использовать другой?

4b9b3361

Ответ 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 (комбинатор, используемый в политоническом греческом языке), ивритские гласные (niqqud), начиная с 05B0, арабские почетности, такие как пила ( "мир ему" ) в 0610 году, арабские гласные точки... список можно продолжить.

Но в основном, для текста на английском, различие не имеет никакого значения. Для некоторых других языков различие может иметь значение, но трудно заранее предсказать, какая разница может быть на практике. Если у вас есть выбор, лучшим ответом может быть isLetter() - всегда можно изменить, чтобы разрешить дополнительные символы в будущем, но сокращение набора принятых символов может быть сложнее.