Maison >Java >javaDidacticiel >Pourquoi `String.matches()` de Java ne parvient-il pas à trouver les mots en minuscules ?
Puzzle Regex : Pourquoi String.matches() se comporte-t-il mal ?
Dans l'extrait de code suivant, l'objectif est d'utiliser des expressions régulières pour identifier les mots qui ne contiennent que des lettres minuscules :
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
Cependant, au lieu d'imprimer "dkoe", qui est le résultat attendu, le code ne produit aucune sortie. Pourquoi cela se produit-il ?
Les pièges de String.matches()
Le coupable réside dans l'incompréhension de la méthode String.matches(). Contrairement à ses homologues apparemment similaires dans d'autres langages, matches() en Java tente de faire correspondre l'intégralité de la chaîne d'entrée à l'expression régulière fournie. Cela signifie que l'expression doit correspondre à la chaîne entière, pas seulement à une partie de celle-ci.
Dans le code donné, l'expression régulière [a-z] correspond à n'importe quelle lettre minuscule. Ainsi, pour que matches() renvoie true, la chaîne d’entrée entière doit être constituée d’exactement un caractère minuscule. Cependant, aucun des mots saisis ne satisfait à cette condition.
La solution : introduction de Pattern et Matcher
Pour résoudre ce problème, il est recommandé d'utiliser des objets Pattern et Matcher, qui offrent plus de contrôle et de flexibilité dans la correspondance des expressions régulières :
Pattern p = Pattern.compile("[a-z]+"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
En utilisant le quantificateur dans la classe de caractères, nous nous assurons que l'expression correspond des chaînes contenant un ou plusieurs caractères minuscules, qui identifieront correctement le mot « dkoe ».
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!