Pregunta ¿Cuál es la diferencia entre Character.isAlphabetic y Character.isLetter en Java?


¿Cuál es la diferencia entre Character.isAlphabetic () y Character.isLetter () en Java? ¿Cuándo debería uno usar uno y cuándo debería uno usar el otro?


32
2017-08-18 23:55


origen


Respuestas:


De acuerdo con la Documentos de la API, isLetter () devuelve verdadero si el carácter tiene alguno de los siguientes tipos de categorías generales: UPPERCASE_LETTER (Lu), LOWERCASE_LETTER (Ll), TITLECASE_LETTER (Lt), MODIFIER_LETTER (Lm), OTHER_LETTER (Lo). Si comparamos isAlphabetic (), tiene el mismo pero agrega LETTER_NUMBER (Nl) y también cualquier carácter que tenga propiedad Other_Alphabetic.

¿Qué significa esto en la práctica? Cada letra es alfabética, pero no todas las letras son alfabéticas: en Java 7 (que usa Unicode 6.0.0), hay 824 caracteres en el BMP que son alfabéticos pero no letras. Algunos ejemplos incluyen 0345 (un combinador utilizado en griego poltónico), puntos de vocales hebreas (niqqud) a partir de 05B0, honoríficos árabes como saw ("la paz sea con él") a las 06:10, puntos vocálicos árabes ... la lista continúa.

Pero básicamente, para el texto en inglés, la distinción no hace diferencia. Para algunos otros idiomas, la distinción puede hacer una diferencia, pero es difícil predecir de antemano cuál será la diferencia en la práctica. Si se tiene una opción, la mejor respuesta es isLetter (): siempre se puede cambiar para permitir caracteres adicionales en el futuro, pero reducir el conjunto de caracteres aceptados podría ser más difícil.


32
2017-08-18 23:55