75 votes

Un moyen simple de compter les occurrences de caractères dans une chaîne

Existe-t-il un moyen simple (au lieu de parcourir manuellement toute la chaîne, ou une boucle pour indexOf) afin de rechercher combien de fois un caractère apparaît dans une chaîne?

Supposons que nous avons "abdsd3 $ asda $ asasdd $ sadas" et que nous voulons que $ apparaisse 3 fois.

125voto

Daniel Points 13823
 String s = "...";
int counter = 0;
for( int i=0; i<s.length(); i++ ) {
    if( s.charAt(i) == '$' ) {
        counter++;
    } 
}
 

C'est certainement le moyen le plus rapide. Les regexes sont beaucoup plus lents ici, et plus difficiles à comprendre.

32voto

Marcelo Points 6708

Pas optimal, mais un moyen simple de compter les occurrences:

 String s = "...";
int counter = s.split("$").length - 1;
 

25voto

thersch Points 495

Vous pouvez utiliser Apache Commons ' StringUtils.countMatches(String string, String subStringToCount) .

7voto

maerics Points 47743

Comme vous balayez quand même toute la chaîne, vous pouvez créer un nombre de caractères complet et faire un nombre quelconque de recherches, le tout pour le même coût big-Oh (n):

 public static Map<Character,Integer> getCharFreq(String s) {
  Map<Character,Integer> charFreq = new HashMap<Character,Integer>();
  if (s != null) {
    for (Character c : s.toCharArray()) {
      Integer count = charFreq.get(c);
      int newCount = (count==null ? 1 : count+1);
      charFreq.put(c, newCount);
    }
  }
  return charFreq;
}

// ...
String s = "abdsd3$asda$asasdd$sadas";
Map counts = getCharFreq(s);
counts.get('$'); // => 3
counts.get('a'); // => 7
counts.get('s'); // => 6
 

5voto

maerics Points 47743

Le comptage de la fréquence des caractères est une tâche courante pour certaines applications (telles que l’éducation), mais elle n’est pas assez générale pour justifier l’inclusion dans les API Java de base. En tant que tel, vous devrez probablement écrire votre propre fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X