Maison >Java >javaDidacticiel >Comment obtenir différents caractères et leur numéro dans une chaîne en Java

Comment obtenir différents caractères et leur numéro dans une chaîne en Java

王林
王林avant
2023-04-20 12:04:061874parcourir

Comment obtenir différents caractères et leur numéro dans une chaîne

Cette question peut être décomposée en deux étapes La première étape consiste à trouver les différents caractères, et la deuxième étape consiste à compter leur nombre. Cela semble un peu absurde, n'est-ce pas ? Laissez-moi d'abord vous donner une réponse.

public class DistinctCharsCount {     public static void main(String[] args) {         printDistinctCharsWithCount("itwanger");         printDistinctCharsWithCount("chenmowanger");     }      private static void printDistinctCharsWithCount(String input) {         Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>();          for (char c : input.toCharArray()) {             Integer oldValue = charsWithCountMap.get(c);              int newValue = (oldValue == null) ? 1 :                     Integer.sum(oldValue, 1);              charsWithCountMap.put(c, newValue);         }         System.out.println(charsWithCountMap);     } }

Le résultat de sortie du programme est :

{i=1, t=1, w=1, a=1, n=1, g=1, e=1, r=1} {c=1, h=1, e=2, n=2, m=1, o=1, w=1, a=1, g=1, r=1}

Laissez-moi parler de mes idées :

1) Déclarez un LinkedHashMap, ou vous pouvez utiliser HashMap, mais le premier peut conserver l'ordre de la chaîne après le fractionnement, et le le résultat semble plus clair en un coup d’œil.

Pourquoi utiliser Map ? Parce que la clé de Map ne peut pas être répétée et qu'elle peut simplement accumuler le nombre de caractères répétés.

2) Divisez la chaîne en caractères et parcourez.

3) Si la clé est nulle, cela signifie que son numéro est +1 ; sinon, +1 est ajouté à la valeur précédente, puis remis dans la Map, écrasant ainsi le nombre de caractères précédent.

La pensée est très claire, n’est-ce pas ? Je ne peux m’empêcher de m’applaudir.

Eh bien, après JDK 8, Map a ajouté une méthode très puissante merge(), qui attribue des valeurs à plusieurs clés à la fois :

private static void printDistinctCharsWithCountMerge(String input) {     Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>();      for (char c : input.toCharArray()) {         charsWithCountMap.merge(c, 1, Integer::sum);     }     System.out.println(charsWithCountMap); }

N'est-ce pas très puissant ? Le premier paramètre est la clé, le deuxième paramètre est la valeur et le troisième paramètre est une BiFunction, ce qui signifie que si la clé existe déjà, recalculez la nouvelle valeur en fonction de la BiFunction.

Si le caractère apparaît pour la première fois, attribuez la valeur à 1 ; sinon, additionnez la valeur précédente à 1.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer