Compter les occurrences d'un caractère dans une chaîne

1. Vue d'ensemble

Il existe de nombreuses façons de compter le nombre d'occurrences d'un caractère dans une chaîne en Java.

Dans cet article rapide, nous allons nous concentrer sur quelques exemples de la façon de compter les caractères, d'abord avec la bibliothèque Java principale, puis avec d'autres bibliothèques et frameworks tels que Spring et Guava.

2. Utilisation de Core Java Lib

2 .1. Approche impérative

Certains développeurs peuvent préférer utiliser le noyau Java. Il existe de nombreuses façons de compter le nombre d'occurrences d'un caractère dans une chaîne.

Commençons par une approche simple / naïve:

String someString = "elephant"; char someChar = 'e'; int count = 0; for (int i = 0; i < someString.length(); i++) { if (someString.charAt(i) == someChar) { count++; } } assertEquals(2, count);

Sans surprise, cela fonctionnera, mais - également sans surprise - il existe de meilleures façons de le faire.

2.2. Utilisation de la récursivité

Une solution moins évidente, mais toujours intéressante, consiste à utiliser la récursivité:

private static int countOccurences( String someString, char searchedChar, int index) { if (index >= someString.length()) { return 0; } int count = someString.charAt(index) == searchedChar ? 1 : 0; return count + countOccurences( someString, searchedChar, index + 1); }

Nous pouvons invoquer cette méthode récursive de la manière suivante: useRecursionToCountChars ("elephant", 'e', ​​0)

2.4. Utilisation d'expressions régulières

Une autre façon serait d'utiliser des expressions régulières:

Pattern pattern = Pattern.compile("[^e]*e"); Matcher matcher = pattern.matcher("elephant"); int count = 0; while (matcher.find()) { count++; } assertEquals(2, count);

Notez simplement que cette solution est techniquement correcte, mais sous-optimale, car il est excessif d'utiliser les expressions régulières très puissantes pour résoudre un problème aussi simple que celui de trouver le nombre d'occurrences d'un caractère dans une chaîne.

2.5. Utilisation des fonctionnalités de Java 8

Les nouvelles fonctionnalités disponibles dans Java 8 peuvent être très utiles ici.

Utilisons des flux et des lambdas pour implémenter le nombre:

String someString = "elephant"; long count = someString.chars().filter(ch -> ch == 'e').count(); assertEquals(2, count); long count2 = someString.codePoints().filter(ch -> ch == 'e').count(); assertEquals(2, count2);

Il s'agit donc clairement d'une solution plus propre et plus lisible utilisant la bibliothèque principale.

3. Utilisation de bibliothèques externes

Regardons maintenant quelques solutions qui utilisent des utilitaires de bibliothèques externes.

3.1. Utilisation de StringUtils

En général, il est toujours préférable d'utiliser une solution existante plutôt que d'inventer la nôtre. La commons.lang.StringUtils classe nous fournit les countMatches () méthode, qui peut être utilisé pour les caractères de comptage ou même des chaînes de sous-accordée dans certaines cordes .

Tout d'abord, nous devons inclure la dépendance appropriée:

 org.apache.commons commons-lang3 3.5 

Nous pouvons trouver la dernière version sur Maven Central.

Utilisons maintenant countMatches () pour compter le nombre de caractères 'e' dans la chaîne littérale «elephant»:

int count = StringUtils.countMatches("elephant", "e"); assertEquals(2, count);

3.2. Utilisation de la goyave

La goyave peut également être utile pour compter les caractères. Nous devons définir la dépendance:

 com.google.guava guava 21.0 

Nous pouvons trouver la dernière version sur Maven Central.

Voyons comment Guava peut nous aider rapidement à compter les caractères:

int count = CharMatcher.is('e').countIn("elephant"); assertEquals(2, count);

3.3. Utiliser Spring

Naturellement, l'ajout de Spring Framework à votre projet juste pour compter les caractères n'a pas de sens. Cependant, si nous l'avons déjà dans notre projet, il suffit d'utiliser la méthode countOccurencesOf () :

int count = StringUtils.countOccurrencesOf("elephant", "e"); assertEquals(2, count);

4. Conclusion

Dans ce rapide didacticiel, nous nous sommes concentrés sur différentes façons de compter les caractères dans la chaîne. Certains d'entre eux ont été conçus uniquement en Java; certains nécessitaient des bibliothèques supplémentaires.

Notre recommandation est d'utiliser les utilitaires déjà existants de StringUtils , Guava ou Spring. Cependant, si l'on préfère utiliser uniquement Java brut, cet article offre quelques possibilités pour y parvenir avec Java 8.

Le code source complet de ces exemples est disponible dans ce projet GitHub.