Maison >Java >javaDidacticiel >Pourquoi `String.matches()` de Java ne parvient-il pas à trouver les mots en minuscules ?

Pourquoi `String.matches()` de Java ne parvient-il pas à trouver les mots en minuscules ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 17:56:11877parcourir

Why Does Java's `String.matches()` Fail to Find Lowercase Words?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn