Le premier appel de la méthode find() démarre une recherche à partir du début de la chaîne de caractères cible, puis lors des appels suivants, la recherche débute au premier caractère suivant l'occurrence trouvée. Tant qu'une occurrence est trouvée la méthode retourne true.
Cible : >abcxxxabcxxxabcxxx Expression régulière : "a.c" Premier appel : abc>xxxabcxxxabcxxx => true Second appel : abcxxxabc>xxxabcxxx => true Troisième appel : abcxxxabcxxxabc>xxx = true Quatrième appel : abcxxxabcxxxabcxxx> => false Pattern modele = Pattern.compile("a.c"); Matcher recherche = modele.matcher("abcxxxabcxxxabcxxx"); while(recherche.find()){ System.out.println("Une occurrence a été trouvée"); //... }
Il existe une autre méthode find() qui possède un paramètre indiquant à quelle position démarrer la recherche.
Exemple [voir]if(recherche.find(10)){ System.out.println("Une occurrence a été trouvée " + "après la position 10."); }
private void rechercher() { try { if(this.fen.getTxtSource() != null && !this.fen.getTxtSource().equals(Utilitaires.VIDE) && this.fen.getExpression() != null && !this.fen.getExpression().equals(Utilitaires.VIDE)) { Pattern modele = Pattern.compile(this.fen.getExpression(), this.calculerOptions()); Matcher recherche = modele.matcher(this.fen.getTxtSource()); int compteur = 0; this.fen.initTable(); this.fen.supprimerSelection(); while(recherche.find()) { compteur++; int nombre = recherche.groupCount(); if(nombre > 0) { for (int i = 0; i < nombre; i++) { this.afficher( compteur, i + 1, recherche.start(i), recherche.end(i), recherche.group(i)); } } else { this.afficher( compteur, 0, recherche.start(), recherche.end(), recherche.group()); } } this.fen.setLblTrouves(this.afficherTrouves(compteur)); this.fen.ajouterSelection(); } } catch(PatternSyntaxException e) { this.afficher(e); } } |