Heim  >  Artikel  >  Java  >  So erhalten Sie verschiedene Zeichen und ihre Anzahl in einer Zeichenfolge in Java

So erhalten Sie verschiedene Zeichen und ihre Anzahl in einer Zeichenfolge in Java

王林
王林nach vorne
2023-04-20 12:04:061812Durchsuche

So erhalten Sie verschiedene Zeichen und ihre Anzahl in einer Zeichenfolge

Diese Frage kann in zwei Schritte unterteilt werden. Der erste Schritt besteht darin, die verschiedenen Zeichen zu finden, und der zweite Schritt besteht darin, ihre Anzahl zu zählen. Es scheint ein bisschen Unsinn zu sein, oder? Lassen Sie mich Ihnen zuerst eine Antwort geben.

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);     } }

Das Ausgabeergebnis des Programms ist:

{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}

Lassen Sie mich über meine Ideen sprechen:

1) Deklarieren Sie eine LinkedHashMap, oder Sie können HashMap verwenden, aber ersteres kann die Reihenfolge der Zeichenfolge nach dem Teilen beibehalten, und das Das Ergebnis sieht auf den ersten Blick klarer aus.

Warum Map verwenden? Weil der Schlüssel von Map nicht wiederholt werden darf und nur die Anzahl der wiederholten Zeichen akkumuliert werden kann.

2) Teilen Sie die Zeichenfolge in Zeichen auf und durchlaufen Sie sie.

3) Wenn der Schlüssel null ist, bedeutet dies, dass seine Zahl +1 ist; andernfalls wird +1 zum vorherigen Wert addiert und dann wieder in die Karte eingefügt, wodurch die vorherige Anzahl von Zeichen überschrieben wird.

Der Gedanke ist doch ganz klar, oder? Ich kann nicht anders, als mir selbst einen Applaus zu spenden.

Nun, nach JDK 8 hat Map eine sehr leistungsstarke Methode merge() hinzugefügt, die mehreren Schlüsseln gleichzeitig Werte zuweist:

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); }

Ist das nicht sehr leistungsfähig? Es kann in einer Codezeile durchgeführt werden. Der erste Parameter ist der Schlüssel, der zweite Parameter ist der Wert und der dritte Parameter ist eine BiFunction. Das heißt, wenn der Schlüssel bereits vorhanden ist, wird der neue Wert basierend auf der BiFunction neu berechnet.

Wenn das Zeichen zum ersten Mal erscheint, weisen Sie den Wert 1 zu, andernfalls addieren Sie den vorherigen Wert zu 1.

Das obige ist der detaillierte Inhalt vonSo erhalten Sie verschiedene Zeichen und ihre Anzahl in einer Zeichenfolge in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen