Disons que j'ai une chaîne qui contient ceci:
HelloxxxHelloxxxHello
Je compile un modèle pour rechercher «Bonjour»
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher("HelloxxxHelloxxxHello");
Il devrait trouver trois correspondances. Comment puis-je compter le nombre de correspondances?
J'ai essayé différentes boucles et utilisé le matcher.groupCount()
mais cela n'a pas fonctionné.
Réponses:
matcher.find()
ne trouve pas toutes les correspondances, seulement la correspondance suivante .Solution pour Java 9+
Solution pour Java 8 et versions antérieures
Vous devrez faire ce qui suit. ( À partir de Java 9, il existe une meilleure solution )
Btw,
matcher.groupCount()
c'est quelque chose de complètement différent.Exemple complet :
Gestion des correspondances qui se chevauchent
Lors du comptage des matches de
aa
dansaaaa
l'extrait ci - dessus vous donnera 2 .Pour obtenir 3 correspondances, c'est-à-dire ce comportement:
Vous devez rechercher une correspondance à l'index
<start of last match> + 1
comme suit:la source
while(matcher.find()){ matcher.region(matcher.end()-1, str.length()); count++; }
Cela devrait fonctionner pour les correspondances qui pourraient se chevaucher:
la source
Depuis Java 9, vous pouvez utiliser le flux fourni par
Matcher.results()
la source
Si vous souhaitez utiliser les flux Java 8 et êtes allergique aux
while
boucles, vous pouvez essayer ceci:Avertissement: cela ne fonctionne que pour les matchs disjoints.
Exemple:
Cela imprime:
Voici une solution pour les correspondances disjointes avec les flux:
la source
Utilisez le code ci-dessous pour trouver le nombre de correspondances que l'expression régulière trouve dans votre entrée
Il s'agit d'un code généralisé et non spécifique, adaptez-le à vos besoins
N'hésitez pas à me corriger s'il y a une erreur.
la source