Anzahl der Vorkommen eines Char in einem String

Zählen Sie die Vorkommen eines Zeichens in einer Zeichenfolge

1. Überblick

Es gibt viele Möglichkeiten, die Anzahl der Vorkommen eines Zeichens inString 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 Kern-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(“elephant”, ‘e', 0)

2.4. Reguläre Ausdrücke verwenden

Eine andere Möglichkeit wäre, reguläre Ausdrücke zu verwenden:

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, die die Kernbibliothek verwendet.

3. Externe Bibliotheken verwenden

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

3.1. Verwenden vonStringUtils

Im Allgemeinen ist es immer besser, eine vorhandene Lösung zu verwenden, als eine eigene zu erfinden. Die Klassecommons.lang.StringUtils liefert uns die MethodecountMatches(), mit der Zeichen oder sogar Teilzeichenfolgen in bestimmtenString gezählt werden können.

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


    org.apache.commons
    commons-lang3
    3.5

Wir können die neueste Version aufMaven Central finden.

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

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

3.2. Mit Guave

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 aufMaven Central finden.

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

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

3.3. Frühling benutzen

Das Hinzufügen des Spring Frameworks zu Ihrem Projekt, nur um Zeichen zu zählen, ist natürlich nicht sinnvoll. Wenn wir es jedoch bereits in unserem Projekt haben, müssen wir nur die MethodecountOccurencesOf()verwenden:

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

4. Fazit

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

Wir empfehlen, bereits vorhandene Dienstprogramme vonStringUtils, 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 inthis GitHub project verfügbar.