Zählen Sie das Auftreten eines Zeichens in einer Zeichenfolge

1. Übersicht

Es gibt viele Möglichkeiten, die Anzahl der Vorkommen eines Zeichens in einem String in Java zu zählen.

In diesem kurzen Artikel konzentrieren wir uns auf einige Beispiele zum Zählen von Zeichen, zuerst mit der Java-Kernbibliothek und dann mit anderen Bibliotheken und Frameworks wie Spring und Guava.

2. Verwenden von Core Java Lib

2 .1. Imperativer Ansatz

Einige Entwickler bevorzugen möglicherweise die Verwendung von Java. Es gibt viele Möglichkeiten, die Anzahl der Vorkommen eines Zeichens in einem String zu zählen.

Beginnen wir mit einem einfachen / naiven Ansatz:

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

Es ist nicht überraschend, dass dies funktioniert, aber - auch nicht überraschend - es gibt bessere Möglichkeiten, dies zu tun.

2.2. Rekursion verwenden

Eine weniger offensichtliche, aber dennoch interessante Lösung ist die Verwendung der Rekursion:

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

Wir können diese rekursive Methode folgendermaßen aufrufen : useRecursionToCountChars ("Elefant", 'e', ​​0)

2.4. Reguläre Ausdrücke verwenden

Eine andere Möglichkeit wäre die Verwendung regulärer Ausdrücke:

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

Beachten Sie nur, dass diese Lösung technisch korrekt, aber nicht optimal ist, da es übertrieben ist, die sehr leistungsfähigen regulären Ausdrücke zu verwenden, um ein so einfaches Problem wie das Ermitteln der Anzahl der Vorkommen eines Zeichens in einer Zeichenfolge zu lösen.

2.5. Verwenden von Java 8-Funktionen

Neue Funktionen in Java 8 können hier sehr hilfreich sein.

Verwenden wir Streams und Lambdas, um die Zählung zu implementieren:

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

Dies ist also eindeutig eine sauberere und besser lesbare Lösung unter Verwendung der Kernbibliothek.

3. Externe Bibliotheken verwenden

Schauen wir uns nun einige Lösungen an, die Dienstprogramme aus externen Bibliotheken verwenden.

3.1. Verwenden von StringUtils

Im Allgemeinen ist es immer besser, eine vorhandene Lösung zu verwenden, als unsere eigene zu erfinden. Die commons.lang.StringUtils Klasse liefert uns die countMatches () Methode, die zum Zählen Zeichen oder sogar Unterketten in bestimmten verwendet werden können String .

Zunächst müssen wir die entsprechende Abhängigkeit einbeziehen:

 org.apache.commons commons-lang3 3.5 

Wir können die neueste Version auf Maven Central finden.

Verwenden wir jetzt countMatches (), um die Anzahl der ' e' -Zeichen im String-Literal "Elefant" zu zählen:

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

3.2. Guave benutzen

Guave kann auch beim Zählen von Zeichen hilfreich sein. Wir müssen die Abhängigkeit definieren:

 com.google.guava guava 21.0 

Wir können die neueste Version auf Maven Central finden.

Mal sehen, wie Guave uns schnell helfen kann, Zeichen zu zählen:

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

3.3. Frühling benutzen

Natürlich macht das Hinzufügen des Spring Frameworks zu Ihrem Projekt nur zum Zählen von Zeichen keinen Sinn. Wenn wir es jedoch bereits in unserem Projekt haben, müssen wir nur die countOccurencesOf () -Methode verwenden:

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

4. Fazit

In diesem kurzen Tutorial haben wir uns auf verschiedene Möglichkeiten konzentriert, Zeichen im String zu zählen. Einige von ihnen wurden ausschließlich in Java entwickelt. Einige benötigten zusätzliche Bibliotheken.

Wir empfehlen, bereits vorhandene Dienstprogramme von StringUtils , Guava oder Spring zu verwenden. Wenn Sie jedoch nur einfaches Java verwenden möchten, bietet dieser Artikel einige Möglichkeiten, um genau das mit Java 8 zu erreichen.

Der vollständige Quellcode für diese Beispiele ist in diesem GitHub-Projekt verfügbar.