Рубрики
Без рубрики

Введение в текст Apache Commons

Узнайте, как использовать текст Apache Commons для общих строковых операций.

Автор оригинала: baeldung.

1. Обзор

Проще говоря, текстовая библиотека Apache Commons содержит ряд полезных утилит для работы со строками |, помимо того, что предлагает ядро Java.

В этом кратком введении мы увидим, что такое текст Apache Commons и для чего он используется, а также некоторые практические примеры использования библиотеки.

2. Зависимость Maven

Давайте начнем с добавления следующей зависимости Maven в ваш pom.xml :


    org.apache.commons
    commons-text
    1.1

Вы можете найти последнюю версию библиотеки в Центральном репозитории Maven .

3. Обзор

Корневой пакет org.apache.commons.text разделен на различные подпакеты:

  • org.apache.commons.text.diff – различия между строками
  • org.apache.commons.text.similarity – сходства и расстояния между строками
  • org.apache.commons.text.translate – перевод текста

Давайте посмотрим, для чего можно использовать каждый пакет – более подробно.

3. Обработка текста

Пакет org.apache.commons.text содержит несколько инструментов для работы со строками|/.

Например, WordUtils имеет API, способные прописывать первую букву каждого слова в строке , менять регистр строки и проверять, содержит ли строка все слова в заданном массиве.

Давайте посмотрим, как мы можем прописать первую букву каждого слова в строке :

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

Вот как мы можем проверить, содержит ли строка все слова в массиве:

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

StrSubstitutor предоставляет удобный способ построения Строк из шаблонов:

@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 является альтернативой Java.lang.StringBuilder . Он предоставляет некоторые новые функции, которые не предоставляются StringBuilder .

Например, мы можем заменить все вхождения String в другой String или очистить String , не назначая новый объект для его ссылки.

Вот краткий пример замены части строки :

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

Чтобы очистить строку , мы можем просто сделать это, вызвав метод clear() в построителе:

strBuilder.clear();

4. Вычисление разницы между строками

Пакет org.apache.commons.text.diff реализует алгоритм Майерса для вычисления различий между двумя строками .

Разница между двумя Строки определяется последовательностью модификаций, которые могут преобразовать один Строка к другому.

Существует три типа команд, которые можно использовать для преобразования Строки в другую – InsertCommand , KeepCommand и DeleteCommand .

Объект Edit Script содержит скрипт, который должен быть запущен для преобразования Строки в другую. Давайте подсчитаем количество модификаций с одним символом, которые должны быть сделаны для преобразования Строки в другую:

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

5. Сходства и Расстояния между строками

Пакет org.apache.commons.text.similarity содержит алгоритмы, полезные для поиска сходств и расстояний между строками .

Например, Самая длинная общая подпоследовательность может использоваться для определения количества общих символов в двух строках :

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

Аналогично, Самое длинное общее расстояние подпоследовательности можно использовать для нахождения количества различных символов в двух строках :

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

6. Перевод текста

Пакет org.apache.text.translate изначально был создан для того, чтобы мы могли настраивать правила, предоставляемые StringEscapeUtils .

Пакет имеет набор классов, которые отвечают за перевод текста в некоторые из различных моделей кодировки символов, таких как Unicode и Числовая ссылка на символы. Мы также можем создать ваши собственные индивидуальные процедуры для перевода.

Давайте посмотрим, как мы можем преобразовать строку | в эквивалентный текст в Юникоде:

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

Здесь мы передаем индекс символа, с которого хотим начать перевод, в метод above () .

LookupTranslator позволяет нам определить нашу собственную таблицу поиска, в которой каждый символ может иметь соответствующее значение, и мы можем перевести любой текст в соответствующий эквивалент.

7. Заключение

В этом кратком руководстве мы увидели обзор того, что представляет собой текст Apache Commons, и некоторые из его общих функций.

Примеры кода можно найти на GitHub.