Einführung in Apache Commons Text

Einführung in Apache Commons Text

1. Überblick

Einfach ausgedrückt enthält die Apache Commons Textbibliothek eine Reihe nützlicher Dienstprogrammmethoden für die Arbeit mitStrings, 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 unserenpom.xml:


    org.apache.commons
    commons-text
    1.1

Die neueste Version der Bibliothek finden Sie unterMaven Central Repository.

3. Überblick

Das Root-Paketorg.apache.commons.text ist in verschiedene Unterpakete unterteilt:

  • org.apache.commons.text.diff - unterscheidet sich zwischenStrings

  • org.apache.commons.text.similarity - Ähnlichkeiten und Abstände zwischenStrings

  • org.apache.commons.text.translate - Text übersetzen

Lassen Sie uns genauer sehen, wofür jedes Paket verwendet werden kann.

3. Umgang mit Text

Das Paketorg.apache.commons.text enthält mehrere Tools für die Arbeit mitStrings.

Zum Beispiel hatWordUtils APIs, die in der Lage sind, den ersten Buchstaben jedes Wortes inString, groß zu schreiben, indem sie den Fall vonString, austauschen und prüfen, ob aString alle Wörter in a enthält gegebenes Array.

Mal sehen, wie wir den ersten Buchstaben jedes Wortes inString: 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 zuJava.lang.StringBuilder. Es bietet einige neue Funktionen, die nicht vonStringBuilder bereitgestellt werden.

Zum Beispiel können wir alle Vorkommen vonString durch andereString ersetzen oderString löschen, ohne der Referenz ein neues Objekt zuzuweisen.

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

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

    assertEquals(new StrBuilder("new StrBuilder!"), strBuilder);
}

Um einString, zu löschen, können Sie dies einfach tun, indem Sie dieclear()-Methode im Builder aufrufen:

strBuilder.clear();

4. Berechnung des Diff zwischenStrings

Das Paketorg.apache.commons.text.diff implementiert den Myers-Algorithmus zur Berechnung von Differenzen zwischen zweiStrings.

Der Unterschied zwischen zweiStrings wird durch eine Folge von Modifikationen definiert, die einString in ein anderes umwandeln können.

Es gibt drei Arten von Befehlen, mit denenString in andere konvertiert werden können -InsertCommand,KeepCommand undDeleteCommand.

EinEditScript-Objekt enthält das Skript, das ausgeführt werden soll, um einString in ein anderes zu konvertieren. Berechnen wir die Anzahl der Einzelzeichenänderungen, die vorgenommen werden sollten, um einString in ein anderes umzuwandeln:

@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 zwischenStrings

Das Paketorg.apache.commons.text.similarity enthält Algorithmen, mit denen Ähnlichkeiten und Abstände zwischenStrings. ermittelt werden können

Zum Beispiel kannLongestCommonSubsequence verwendet werden, um die Anzahl der gemeinsamen Zeichen in zweiStrings 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 kannLongestCommonSubsequenceDistance verwendet werden, um die Anzahl verschiedener Zeichen in zweiStrings 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 Paketorg.apache.text.translate wurde ursprünglich erstellt, damit wir die vonStringEscapeUtils 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 einString in den 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 Methodeabove().

LookupTranslator ermöglicht es uns, eine eigene Nachschlagetabelle zu 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 inover on GitHub.