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
Libérer: 2024-12-02 03:14:15
original
879 Les gens l'ont consulté

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);
    }
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal