# \[Java\] Pattern.matcher.groupCount()

**URL:** <https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132 "2016-02-21T20:16:14Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/1 "2016-02-21T20:16:14Z")

</div>

Bonjour,  
je veux compter le nombre de paires de chiffres dans un texte :  
“03 24 56” doit donner 3  
"85 54" doit donner 2  
Ça marche pas avec un Pattern.compile("._([0-9]{2})._"); je me dis : je suis pas doué …  
Mais là où je comprends plus, un code copié sur internet me donne un résultat différent de celui annoncé :

`p = Pattern.compile("J(ava)");
	    String candidateString = "This is Java. This is a Java example.";
	    Matcher matcher = p.matcher(candidateString);
	    int numberOfGroups = matcher.groupCount();
	    System.out.println("numberOfGroups =" + numberOfGroups);`  
Ça m’affiche 1 au lieu de 3 (2?)  
([http://www.tutorialspoint.com/javaexamples/regular\_count.htm](http://www.tutorialspoint.com/javaexamples/regular_count.htm))

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/2 "2016-02-21T20:16:14Z")

</div>

Si je comprends bien la doc, groupCount() compte le nombre de groupes dans le motif. Alors je ne vois pas à quoi cette méthode peut bien servir.

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/3 "2016-02-21T20:16:15Z")

</div>

Apparemment, il n’y a pas d’autre choix que de dénombrer le retour d’un match ? :

```auto
        Matcher matcher = Pattern.compile(regex).matcher(text);
        int occur = 0;
        while(matcher.find()) occur ++;      
```

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/4 "2016-02-21T20:16:29Z")

</div>

> [@blaisoth](#):
>
> Ça m’affiche 1 au lieu de 3 (2?)

Déjà j’aurais un doute sur le tuto … quand on donne un résultat qui semble faux c’est qu’il ne l’as pas tester …

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/5 "2016-02-21T20:16:30Z")

</div>

Ton pattern n’est pas bon enlève les [mono].\*[/mono]. Ensuite oui tu n’a pas d’autre choix.

Édition :  
Avec Java 8 (et guava) tu dois pouvoir faire ça (mais c’est pas très efficace) :

```auto
final String chaine = /* … */;
Splitter.onPattern("[^0-9]")
        .omitEmptyStrings()
        .splitToList(chaine).stream()
                            .mapToInt(b -> b.length()%2)
                            .sum()
```

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 8:16 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/6 "2016-02-21T20:16:31Z")

</div>

OK merci.  
j’avais corrigé avec :  
([0-9]{2} )|([0-9]{2}$)  
et pour groupCount() ? Quelqu’un s’en est déjà servi ?

---

<div class="post-metadata">

**Author:** ![hasable](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/h/c5a1d2/32.png) [@hasable](https://www.debian-fr.org/u/hasable)\
**Post date:** [Février 21, 2016, 8:17 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/7 "2016-02-21T20:17:05Z")

</div>

> [@blaisoth](#):
>
> et pour groupCount() ? Quelqu’un s’en est déjà servi ?

Oui: c’était il y’a longtemps, et ça normalement ça fonctionne. Pourquoi?

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 8:17 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/8 "2016-02-21T20:17:14Z")

</div>

Je voulais comprendre à quoi cela pouvait servir une méthode qui compte des parenthèses dans une expression qu’on a écrit soi-même.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 8:17 UTC](https://www.debian-fr.org/t/java-pattern-matcher-groupcount/62132/9 "2016-02-21T20:17:14Z")

</div>

> [@blaisoth](#):
>
> Je voulais comprendre à quoi cela pouvait servir une méthode qui compte des parenthèses dans une expression qu’on a écrit soi-même.

Parce que tu ne l’a pas forcément écrite toi. Tu peut le lire dans un fichier de configuration ou l’avoir en paramètre de ton programme.
