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() { Mapsubstitutes = 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"); EditScriptscript = 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.