Java : comment compter le nombre d'occurrences de caractère dans une chaîne (string) ?
Pour réaliser l'opération, il est possible d'utiliser des méthodes fournies par des librairies ou bien des frameworks.
On peut avoir besoin de compter le nombre de fois qu'apparaissent un ou plusieurs caractère(s) dans une chaîne de caractères. On parle alors du nombre d'occurrences d'un caractère dans une chaîne. Pour réaliser cette opération dans le langage Java, on peut utiliser des méthodes fournies par des librairies ou bien des frameworks. Si l'on ne peut pas utiliser ces méthodes, il existe des solutions pour les recréer.
La librairie Commons Lang de la fondation Apache fournit différentes méthodes pour faciliter l'utilisation du langage Java. Parmi ces ajouts, la méthode StringUtils.countMatches() retourne le nombre d'occurrences d'une chaîne dans une autre. Le premier paramètre est la chaîne de caractères dans laquelle on doit chercher tandis que le deuxième est la chaîne de caractères à chercher.
int nb = StringUtils.countMatches(Combien de a dans cette phrase ?, a);
Le Framework Java Spring possède également sa propre méthode. Il s'agit de la méthode StringUtils.countOccurrencesOf(). Elle utilise exactement les mêmes paramètres dans le même ordre.
int nb = StringUtils.countOccurrencesOf(Combien de a dans cette phrase ?, a);
Si vous travaillez dans un environnement où vous ne pouvez pas utiliser de librairies externes (c'est le cas par exemple lorsque vous développez une application Android) ou si vous ne voulez pas utiliser ces librairies, vous pouvez créer votre propre méthode. La façon la plus simple de la créer consiste à utiliser une boucle qui va parcourir la chaîne et compter le nombre de fois où le caractère apparaît. Cette technique ne fonctionne cependant qu'avec un seul caractère à rechercher, pas une chaîne de plusieurs et est couteuse en termes de performances.
public static int compterOccurrences(String maChaine, char recherche) { int nb = 0; for (int i=0; i < maChaine.length(); i++) { if (maChaine.charAt(i) == recherche) nb++; } return nb; }
Une solution plus rapide et n'utilisant qu'une seule ligne de code consiste à récupérer la longueur de la chaîne dans laquelle on effectue la recherche avec la propriété length, puis à y soustraire la longueur de cette chaîne dans laquelle on a enlevé la chaîne recherchée. On va utiliser pour cela la méthode replace(). Cette méthode est plus rapide et fonctionne également avec les chaînes de caractères.
public static int compterOccurrences(String maChaine, String recherche) { return maChaine.length() - maChaine.replace(recherche, ).length(); }