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.