Introduzione ad Apache Commons Text

1. Panoramica

In poche parole, la libreria Apache Commons Text contiene una serie di utili metodi di utilità per lavorare con le stringhe , oltre a ciò che offre Java.

In questa rapida introduzione vedremo cos'è Apache Commons Text ea cosa serve, oltre ad alcuni esempi pratici di utilizzo della libreria.

2. Dipendenza da Maven

Iniziamo aggiungendo la seguente dipendenza Maven al nostro pom.xml :

 org.apache.commons commons-text 1.1 

È possibile trovare l'ultima versione della libreria nel Maven Central Repository.

3. Panoramica

Il pacchetto root org.apache.commons.text è suddiviso in diversi sotto-pacchetti:

  • org.apache.commons.text.diff - differenze tra le stringhe
  • org.apache.commons.text.similarity - somiglianze e distanze tra le stringhe
  • org.apache.commons.text.translate - traduzione di testo

Vediamo per cosa può essere utilizzato ogni pacchetto - in modo più dettagliato.

3. Gestione del testo

Il pacchetto org.apache.commons.text contiene più strumenti per lavorare con le stringhe.

Ad esempio, WordUtils dispone di API in grado di rendere maiuscola la prima lettera di ogni parola in una stringa, scambiare il caso di una stringa e verificare se una stringa contiene tutte le parole in un dato array.

Vediamo come possiamo scrivere in maiuscolo la prima lettera di ogni parola in una stringa:

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

Ecco come possiamo verificare se una stringa contiene tutte le parole in un array:

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

StrSubstitutor fornisce un modo conveniente per creare stringhe da modelli:

@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 è un'alternativa a Java.lang.StringBuilder . Fornisce alcune nuove funzionalità che non sono fornite da StringBuilder .

Ad esempio, possiamo sostituire tutte le occorrenze di una stringa in un'altra stringa o cancellare una stringa senza assegnare un nuovo oggetto al suo riferimento.

Ecco un rapido esempio per sostituire parte di una stringa:

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

Per cancellare una stringa, possiamo farlo semplicemente chiamando il metodo clear () nel builder:

strBuilder.clear();

4. Calcolo della differenza tra le stringhe

Il pacchetto org.apache.commons.text.diff implementa l'algoritmo di Myers per il calcolo delle differenze tra due stringhe.

La differenza tra due stringhe è definita da una sequenza di modifiche che possono convertire una stringa in un'altra.

Esistono tre tipi di comandi che possono essere utilizzati per convertire una stringa in un'altra: InsertCommand , KeepCommand e DeleteCommand .

Un oggetto EditScript contiene lo script che dovrebbe essere eseguito per convertire una stringa in un'altra. Calcoliamo il numero di modifiche di un solo carattere che dovrebbero essere fatte per convertire una stringa in un'altra:

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

5. Somiglianze e distanze tra le stringhe

Il pacchetto org.apache.commons.text.similarity contiene algoritmi utili per trovare somiglianze e distanze tra le stringhe.

Ad esempio, LongestCommonSubsequence può essere utilizzato per trovare il numero di caratteri comuni in due stringhe :

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

Allo stesso modo, LongestCommonSubsequenceDistance può essere utilizzato per trovare il numero di caratteri diversi in due stringhe :

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

6. Traduzione del testo

Il pacchetto org.apache.text.translate è stato inizialmente creato per permetterci di personalizzare le regole fornite da StringEscapeUtils .

Il pacchetto ha una serie di classi che sono responsabili della traduzione del testo in alcuni dei diversi modelli di codifica dei caratteri come Unicode e Numeric Character Reference. Possiamo anche creare le nostre routine personalizzate per la traduzione.

Vediamo come possiamo convertire una stringa nel suo testo Unicode equivalente:

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

Qui, stiamo passando l'indice del carattere da cui vogliamo iniziare la traduzione al metodo above () .

LookupTranslator ci consente di definire la nostra tabella di ricerca in cui ogni carattere può avere un valore corrispondente e possiamo tradurre qualsiasi testo nel suo equivalente corrispondente.

7. Conclusione

In questo breve tutorial, abbiamo visto una panoramica di cosa sia Apache Commons Text e alcune delle sue caratteristiche comuni.

Gli esempi di codice possono essere trovati su GitHub.