Einführung in Apache Commons Text

1. Übersicht

Einfach ausgedrückt enthält die Apache Commons Textbibliothek eine Reihe nützlicher Dienstprogrammmethoden für die Arbeit mit Strings , die über das hinausgehen, was das Kern-Java bietet.

In dieser kurzen Einführung erfahren Sie, was Apache Commons Text ist und wofür er verwendet wird, sowie einige praktische Beispiele für die Verwendung der Bibliothek.

2. Maven-Abhängigkeit

Beginnen wir mit dem Hinzufügen der folgenden Maven-Abhängigkeit zu unserer pom.xml :

 org.apache.commons commons-text 1.1 

Die neueste Version der Bibliothek finden Sie im Maven Central Repository.

3. Übersicht

Das Stammpaket org.apache.commons.text ist in verschiedene Unterpakete unterteilt:

  • org.apache.commons.text.diff - unterscheidet zwischen Strings
  • org.apache.commons.text.similarity - Ähnlichkeiten und Abstände zwischen Strings
  • org.apache.commons.text.translate - Text übersetzen

Mal sehen, wofür jedes Paket verwendet werden kann - genauer.

3. Umgang mit Text

Das Paket org.apache.commons.text enthält mehrere Tools für die Arbeit mit Strings.

Zum Beispiel WordUtils hat APIs in der Lage , den ersten Buchstaben jedes Wortes in einer Kapital String, Swapping den Fall einer Schnur, und die Überprüfung , ob ein String alle Wörter in einem gegebenen Array enthält.

Mal sehen, wie wir den ersten Buchstaben jedes Wortes in einem String groß schreiben können:

@Test public void whenCapitalized_thenCorrect() { String toBeCapitalized = "to be capitalized!"; String result = WordUtils.capitalize(toBeCapitalized); assertEquals("To Be Capitalized!", result); }

So können wir überprüfen, ob eine Zeichenfolge alle Wörter in einem Array enthält:

@Test public void whenContainsWords_thenCorrect() { boolean containsWords = WordUtils .containsAllWords("String to search", "to", "search"); assertTrue(containsWords); }

StrSubstitutor bietet eine bequeme Möglichkeit, Strings aus Vorlagen zu erstellen :

@Test public void whenSubstituted_thenCorrect() { Map substitutes = new HashMap(); substitutes.put("name", "John"); substitutes.put("college", "University of Stanford"); String templateString = "My name is ${name} and I am a student at the ${college}."; StrSubstitutor sub = new StrSubstitutor(substitutes); String result = sub.replace(templateString); assertEquals("My name is John and I am a student at the University of Stanford.", result); }

StrBuilder ist eine Alternative zu Java.lang.StringBuilder . Es bietet einige neue Funktionen, die von StringBuilder nicht bereitgestellt werden .

Beispielsweise können wir alle Vorkommen eines Strings in einem anderen String ersetzen oder einen String löschen, ohne seiner Referenz ein neues Objekt zuzuweisen.

Hier ist ein kurzes Beispiel, um einen Teil eines Strings zu ersetzen :

@Test public void whenReplaced_thenCorrect() { StrBuilder strBuilder = new StrBuilder("example StrBuilder!"); strBuilder.replaceAll("example", "new"); assertEquals(new StrBuilder("new StrBuilder!"), strBuilder); }

Um einen String zu löschen , können Sie dies einfach tun, indem Sie die clear () -Methode für den Builder aufrufen :

strBuilder.clear();

4. Berechnung des Unterschieds zwischen Saiten

Das Paket org.apache.commons.text.diff implementiert den Myers-Algorithmus zur Berechnung von Differenzen zwischen zwei Strings.

Das diff zwischen zwei Strings wird durch eine Folge von Modifikationen definiert , die man umwandeln können String zu einem anderen.

Es gibt drei Arten von Befehlen, mit denen ein String in einen anderen konvertiert werden kann : InsertCommand , KeepCommand und DeleteCommand .

Ein EditScript- Objekt enthält das Skript, das ausgeführt werden soll, um einen String in einen anderen zu konvertieren . Berechnen wir die Anzahl der Einzelzeichenänderungen, die vorgenommen werden sollten, um einen String in einen anderen zu konvertieren :

@Test public void whenEditScript_thenCorrect() { StringsComparator cmp = new StringsComparator("ABCFGH", "BCDEFG"); EditScript script = cmp.getScript(); int mod = script.getModifications(); assertEquals(4, mod); }

5. Ähnlichkeiten und Abstände zwischen Saiten

Das Paket org.apache.commons.text.similarity enthält Algorithmen, mit denen Ähnlichkeiten und Abstände zwischen Zeichenfolgen ermittelt werden können.

Beispielsweise kann LongestCommonSubsequence verwendet werden, um die Anzahl der gemeinsamen Zeichen in zwei Zeichenfolgen zu ermitteln :

@Test public void whenCompare_thenCorrect() { LongestCommonSubsequence lcs = new LongestCommonSubsequence(); int countLcs = lcs.apply("New York", "New Hampshire"); assertEquals(5, countLcs); }

In ähnlicher Weise kann LongestCommonSubsequenceDistance verwendet werden, um die Anzahl verschiedener Zeichen in zwei Zeichenfolgen zu ermitteln :

@Test public void whenCalculateDistance_thenCorrect() { LongestCommonSubsequenceDistance lcsd = new LongestCommonSubsequenceDistance(); int countLcsd = lcsd.apply("New York", "New Hampshire"); assertEquals(11, countLcsd); }

6. Textübersetzung

Das Paket org.apache.text.translate wurde ursprünglich erstellt, damit wir die von StringEscapeUtils bereitgestellten Regeln anpassen können .

Das Paket enthält eine Reihe von Klassen, die für die Übersetzung von Text in einige der verschiedenen Zeichencodierungsmodelle wie Unicode und Numeric Character Reference verantwortlich sind. Wir können auch unsere eigenen benutzerdefinierten Routinen für die Übersetzung erstellen.

Mal sehen, wie wir einen String in seinen entsprechenden Unicode-Text konvertieren können :

@Test public void whenTranslate_thenCorrect() { UnicodeEscaper ue = UnicodeEscaper.above(0); String result = ue.translate("ABCD"); assertEquals("\\u0041\\u0042\\u0043\\u0044", result); }

Hier übergeben wir den Index des Zeichens, von dem aus wir die Übersetzung starten möchten, in die obige () Methode.

Mit LookupTranslator können wir unsere eigene Nachschlagetabelle definieren, in der jedes Zeichen einen entsprechenden Wert haben kann, und wir können jeden Text in das entsprechende Äquivalent übersetzen.

7. Fazit

In diesem kurzen Tutorial haben wir einen Überblick über Apache Commons Text und einige seiner gemeinsamen Funktionen erhalten.

Die Codebeispiele finden Sie auf GitHub.