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

王林
Libérer: 2023-04-20 12:04:06
avant
1891 Les gens l'ont consulté

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);     } }
Copier après la connexion

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}
Copier après la connexion

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); }
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal