Introduction au texte Apache Commons

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 avecStrings, 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 des exemples pratiques d'utilisation de la bibliothèque.

2. Dépendance Maven

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


    org.apache.commons
    commons-text
    1.1

Vous pouvez trouver la dernière version de la bibliothèque auMaven Central Repository.

3. Vue d'ensemble

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

  • org.apache.commons.text.diff - diffs entreStrings

  • org.apache.commons.text.similarity - similitudes et distances entreStrings

  • org.apache.commons.text.translate - traduction de texte

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

3. Gestion du texte

Le packageorg.apache.commons.text contient plusieurs outils pour travailler avecStrings.

Par exemple,WordUtils a des API capables de mettre en majuscule la première lettre de chaque mot dans unString, en échangeant la casse d'unString, et en vérifiant si unString contient tous les mots d'un tableau donné.

Voyons comment nous pouvons mettre en majuscule la première lettre de chaque mot dans unString:

@Test
public void whenCapitalized_thenCorrect() {
    String toBeCapitalized = "to be capitalized!";
    String result = WordUtils.capitalize(toBeCapitalized);

    assertEquals("To Be Capitalized!", result);
}

Voici comment 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 desStrings à 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 parStringBuilder.

Par exemple, nous pouvons remplacer toutes les occurrences d'unString dans un autreString ou effacer unString sans affecter un nouvel objet à sa référence.

Voici un exemple rapide pour remplacer une partie d'unString:

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

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

Pour effacer unString,, nous pouvons simplement le faire en appelant la méthodeclear() sur le générateur:

strBuilder.clear();

4. Calcul du différentiel entreStrings

Le packageorg.apache.commons.text.diff implémente l'algorithme de Myers pour le calcul des différences entre deuxStrings.

Le différentiel entre deuxStrings est défini par une suite de modifications qui peuvent convertir unString en un autre.

Il existe trois types de commandes qui peuvent être utilisées pour convertir unString en un autre -InsertCommand,KeepCommand etDeleteCommand.

Un objetEditScript contient le script qui doit être exécuté pour convertir unString en un autre. Calculons le nombre de modifications à un seul caractère à effectuer pour convertir unString en un 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 entreStrings

Le packageorg.apache.commons.text.similarity contient des algorithmes utiles pour trouver des similitudes et des distances entreStrings.

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

@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 deuxStrings:

@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 packageorg.apache.text.translate a été initialement créé pour nous permettre de personnaliser les règles fournies parStringEscapeUtils.

Le paquet contient un ensemble de classes chargées de traduire le texte en différents modèles d’encodage 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 unString 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éthodeabove().

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 didacticiel, 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ésover on GitHub.