Introduction au texte Apache Commons

1. Vue d'ensemble

En termes simples, la bibliothèque Apache Commons Text contient un certain nombre de méthodes utilitaires utiles pour travailler avec des chaînes , au-delà de ce que propose le noyau Java.

Dans cette introduction rapide, nous verrons ce qu'est Apache Commons Text et à quoi il sert, ainsi que quelques exemples pratiques d'utilisation de la bibliothèque.

2. Dépendance de Maven

Commençons par ajouter la dépendance Maven suivante à notre pom.xml :

 org.apache.commons commons-text 1.1 

Vous pouvez trouver la dernière version de la bibliothèque dans le référentiel central Maven.

3. Aperçu

Le package racine org.apache.commons.text est divisé en différents sous-packages:

  • org.apache.commons.text.diff - diffs entre les chaînes
  • org.apache.commons.text.similarity - similitudes et distances entre les chaînes
  • org.apache.commons.text.translate - traduction de texte

Voyons à quoi chaque paquet peut être utilisé - plus en détail.

3. Gestion du texte

Le package org.apache.commons.text contient plusieurs outils pour travailler avec des chaînes.

Par exemple, WordUtils a des API capables de mettre en majuscule la première lettre de chaque mot dans une chaîne, d' échanger la casse d'une chaîne et de vérifier si une chaîne contient tous les mots d'un tableau donné.

Voyons comment nous pouvons mettre en majuscule la première lettre de chaque mot dans une chaîne:

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

Voici comment nous pouvons vérifier si une chaîne contient tous les mots d'un tableau:

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

StrSubstitutor fournit un moyen pratique de créer des chaînes à partir de modèles:

@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 est une alternative à Java.lang.StringBuilder . Il fournit de nouvelles fonctionnalités qui ne sont pas fournies par StringBuilder .

Par exemple, nous pouvons remplacer toutes les occurrences d'une chaîne dans une autre chaîne ou effacer une chaîne sans affecter un nouvel objet à sa référence.

Voici un exemple rapide pour remplacer une partie d'une chaîne:

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

Pour effacer une chaîne, nous pouvons simplement le faire en appelant la méthode clear () sur le générateur:

strBuilder.clear();

4. Calcul de la différence entre les chaînes

Le package org.apache.commons.text.diff implémente l'algorithme Myers pour calculer les différences entre deux chaînes.

La différence entre deux chaînes est définie par une séquence de modifications qui peuvent convertir une chaîne en une autre.

Il existe trois types de commandes qui peuvent être utilisées pour convertir une chaîne en une autre: InsertCommand , KeepCommand et DeleteCommand .

Un objet EditScript contient le script qui doit être exécuté pour convertir une chaîne en une autre. Calculons le nombre de modifications à un seul caractère qui doivent être effectuées pour convertir une chaîne en une autre:

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

5. Similitudes et distances entre les chaînes

Le package org.apache.commons.text.similarity contient des algorithmes utiles pour trouver les similitudes et les distances entre les chaînes.

Par exemple, LongestCommonSubsequence peut être utilisé pour trouver le nombre de caractères communs dans deux chaînes :

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

De même, LongestCommonSubsequenceDistance peut être utilisé pour trouver le nombre de caractères différents dans deux chaînes :

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

6. Traduction de texte

Le package org.apache.text.translate a été initialement créé pour nous permettre de personnaliser les règles fournies par StringEscapeUtils .

Le package a un ensemble de classes qui sont responsables de la traduction du texte en certains des différents modèles de codage de caractères tels que Unicode et Numeric Character Reference. Nous pouvons également créer nos propres routines personnalisées pour la traduction.

Voyons comment nous pouvons convertir une chaîne en son texte Unicode équivalent:

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

Ici, nous passons l'index du caractère à partir duquel nous voulons commencer la traduction à la méthode ci - dessus () .

LookupTranslator nous permet de définir notre propre table de recherche où chaque caractère peut avoir une valeur correspondante, et nous pouvons traduire n'importe quel texte en son équivalent correspondant.

7. Conclusion

Dans ce rapide tutoriel, nous avons vu un aperçu de ce qu'est Apache Commons Text et de certaines de ses fonctionnalités communes.

Les exemples de code peuvent être trouvés sur GitHub.