196 votes

Quel est le meilleur moyen de savoir si un caractère est une lettre ou un chiffre en Java sans utiliser de regex ?

Quel est le meilleur moyen et/ou le plus facile de reconnaître si une chaîne de caractères.charAt(index) est une lettre A-z ou un chiffre en Java sans utiliser d'expressions régulières ? Merci.

364voto

Adam Points 14766

Character.isDigit(string.charAt(index)) ( JavaDoc ) retournera vrai si c'est un chiffre.
Character.isLetter(string.charAt(index)) ( JavaDoc ) retournera vrai si c'est une lettre.

17 votes

Remarque : ces derniers vous indiquent si le caractère est une lettre ou un chiffre Unicode. L'OP a demandé "une lettre A-z" ... peu importe ce que cela signifie.

5 votes

Pourquoi l'ASCII (255 ) passe-t-il dans mon cas ? Je pensais que c'était seulement pour a-z, A-Z et 0-9 ?

0 votes

Les liens @CO'B sont maintenant corrigés. Merci de me le faire savoir.

35voto

mr5 Points 503

Je cherche une fonction qui vérifie seulement si c'est une des lettres latines ou un nombre décimal. Depuis char c = 255 qui, en version imprimable, est et considéré comme une lettre par Character.isLetter(c) . Je pense que cette fonction est ce que la plupart des développeurs recherchent :

private static boolean isLetterOrDigit(char c) {
    return (c >= 'a' && c <= 'z') ||
           (c >= 'A' && c <= 'Z') ||
           (c >= '0' && c <= '9');
}

2 votes

Je viens de parcourir notre code et j'ai été surpris du nombre de bogues qu'il contenait à cause de isLetter et isLetterOrDigit... Merci !

2 votes

D'une manière ou d'une autre, vous avez confondu vos jeux de caractères et vos polices d'affichage. Codepoint Unicode u00ff est en fait le caractère ÿ. (Y minuscule avec un tréma.) Le point de code que cela représente est u251c .

0 votes

@StephenC vous avez raison. J'ai oublié comment j'ai fini par taper ce caractère au lieu de nbsp

31voto

Stephen C Points 255558

Comme l'indiquent les réponses (si vous les examinez attentivement !), votre question est ambiguë. Qu'entendez-vous par "une lettre A-z" ou un chiffre ?

  • Si vous voulez savoir si un personnage est un Unicode lettre ou chiffre, puis utilisez la touche Character.isLetter y Character.isDigit méthodes.

  • Si vous voulez savoir si un personnage est un ASCII la meilleure chose à faire est de tester en comparant avec les plages de caractères "a" à "z", "A" à "Z" et "0" à "9".

Notez que toutes les lettres/chiffres ASCII sont des lettres/chiffres Unicode... mais il existe de nombreuses lettres/chiffres Unicode qui ne sont pas ASCII. Par exemple, les lettres accentuées, cyrillique, sanskrit, ...


La solution générale est de procéder ainsi :

Character.UnicodeBlock block = Character.UnicodeBlock.of(someCodePoint);

puis testez pour voir si le bloc est l'un de ceux qui vous intéressent. Dans certains cas, vous devrez tester plusieurs blocs. Par exemple, il existe (au moins) 4 blocs de code pour les caractères cyrilliques et 7 pour les caractères latins. Le site Character.UnicodeBlock définit des constantes statiques pour des blocs bien connus ; voir la classe javadocs .

Notez que tout point de code sera en au maximum un bloc.

17voto

ChuanRocks Points 471

La classe de caractères Java possède un isLetterOrDigit depuis la version 1.0.2

1 votes

Attention, isLetterOrDigit donne vrai sur bien plus que a-Z0-9 ! !! référez-vous à la doc ici docs.oracle.com/javase/7/docs/api/java/lang/

12voto

Cameron Points 32208

Je ne sais pas ce que vous en pensez, mais ça me semble assez simple :

Character.isDigit(str.charAt(index))
Character.isLetter(str.charAt(index))

0 votes

Attention, isLetterOrDigit donne vrai sur bien plus que a-Z0-9 ! !! référez-vous à la doc ici docs.oracle.com/javase/7/docs/api/java/lang/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X