Comment faire pour déterminer si un caractère est une lettre en Java?
Comment voulez-vous vérifier si une Chaîne d'un caractère est une lettre - y compris les lettres avec des accents?
J'ai eu à faire ce travail récemment, donc je vais répondre moi-même, après la récente VB6 question m'a rappelé.
Vous devez vous connecter pour publier un commentaire.
Caractère.isLetter() est beaucoup plus rapide que la chaîne.correspond à(), car les chaînes de caractères.matches() compile un nouveau Modèle à chaque fois. Même la mise en cache le motif, je pense que isLetter() toujours le battre.
EDIT: Juste couru à travers ce nouveau et je pensais que j'allais essayer de venir avec quelques chiffres réels. Voici ma tentative à un indice de référence, la vérification de tous les trois méthodes (
matches()
avec et sans mise en cache de laPattern
, etCharacter.isLetter()
). J'ai aussi fait en sorte qu'il y avait à la fois valides et non valides personnages contrôlés, afin de ne pas fausser les choses.Et ma sortie:
C'est presque 8x mieux, même avec le cache
Pattern
. (Et non mis en cache est presque 3x pire que mis en cache.)c.codePointAt(0)
plutôt quec.charAt(0)
danstestCharacter()
; sinon, il va échouer pour les caractères en dehors de la BMP.Juste vérifier si une lettre est dans A-Z parce que cela ne comprend pas les lettres avec accents ou des lettres dans les alphabets autres.
J'ai découvert que vous pouvez utiliser l'expression régulière en classe pour "Unicode lettre", ou l'un de ses casse variations:
Vous pouvez aussi le faire avec Caractère classe:
mais c'est moins pratique si vous avez besoin de vérifier plus d'une lettre.