Maison >Java >javaDidacticiel >Pourquoi `String.matches()` de Java ne parvient-il pas à faire correspondre les sous-chaînes et comment puis-je faire correspondre correctement les sous-chaînes à l'aide d'expressions régulières ?

Pourquoi `String.matches()` de Java ne parvient-il pas à faire correspondre les sous-chaînes et comment puis-je faire correspondre correctement les sous-chaînes à l'aide d'expressions régulières ?

DDD
DDDoriginal
2024-12-02 03:14:15882parcourir

Why Does Java's `String.matches()` Fail to Match Substrings, and How Can I Correctly Match Substrings Using Regular Expressions?

Comprendre l'écart dans String.matches()

Lorsque vous essayez de valider des chaînes à l'aide d'expressions régulières en Java, vous pouvez rencontrer un comportement inattendu avec la méthode String.matches(). Bien que l'intention de cette méthode implique de faire correspondre une sous-chaîne dans une chaîne, elle tente en fait de faire correspondre la chaîne entière à l'expression régulière fournie.

Considérez l'extrait de code suivant :

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
    if(s.matches("[a-z]"))
    {
        System.out.println(s);
    }
}

Comme vous l'avez remarqué, ce code ne parvient pas à imprimer le résultat attendu ("dkoe") car il ne correspond pas à la sous-chaîne souhaitée mais vérifie plutôt si la chaîne entière ne contient que des minuscules lettres.

La solution : utiliser Pattern et Matcher

Pour résoudre ce problème, vous devez utiliser les classes Pattern et Matcher avec la méthode .find() pour déterminer si une expression régulière correspond à une sous-chaîne dans le texte d'entrée. Cette approche implique les étapes suivantes :

  1. Créez un objet Pattern en compilant l'expression régulière.
  2. Créez un objet Matcher en appliquant le modèle à la chaîne d'entrée.
  3. Utilisez la méthode .find() du matcher pour vérifier si le modèle correspond à une sous-chaîne.

Voici un exemple :

Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match found

Si vous souhaitez vous assurer que l'entrée ne contient que des lettres minuscules, vous pouvez utiliser l'expression régulière suivante : ^[a-z] $. N'oubliez pas d'utiliser .find() au lieu de .matches().

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