Въведение в Apache Commons Text

1. Общ преглед

Просто казано, библиотеката Apache Commons Text съдържа редица полезни полезни методи за работа със Strings , освен това, което предлага основната Java.

В това кратко въведение ще видим какво представлява Apache Commons Text и за какво се използва, както и някои практически примери за използване на библиотеката.

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

Нека започнем с добавяне на следната зависимост на Maven към нашия pom.xml :

 org.apache.commons commons-text 1.1 

Можете да намерите най-новата версия на библиотеката в Централното хранилище на Maven.

3. Общ преглед

Основният пакет org.apache.commons.text е разделен на различни подпакети :

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

Нека да видим за какво може да се използва всеки пакет - по-подробно.

3. Работа с текст

Пакетът org.apache.commons.text съдържа множество инструменти за работа със Strings.

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

Нека да видим как можем да изписваме с главна буква първата буква от всяка дума в низ:

@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 реализира алгоритъма на Myers за изчисляване на разликите между два низа.

Разл между две ленти се определя от последователност от модификации, които могат да се превръщат един String към друга.

Има три типа команди, които могат да се използват за преобразуване на низ в друг - InsertCommand , KeepCommand и DeleteCommand .

Един EditScript обект държи скрипт, който трябва да се работи, за да се преобразува низ в друг. Нека изчислим броя на модификациите с единичен знак, които трябва да бъдат направени, за да преобразуваме String в друг:

@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.s similarity съдържа алгоритми, полезни за намиране на прилики и разстояния между низовете.

Например LongestCommonSubsequence може да се използва за намиране на броя на често срещаните знаци в два низа :

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

По същия начин LongestCommonSubsequenceDistance може да се използва за намиране на броя на различните знаци в два низа :

@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 и Numeric Character Reference. Също така можем да създадем свои собствени персонализирани процедури за превод.

Нека да видим как можем да преобразуваме String в еквивалентния му Unicode текст:

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

Тук предаваме индекса на знака, от който искаме да започнем превода, към метода по-горе () .

LookupTranslator ни дава възможност да дефинираме собствената си справочна таблица, където всеки знак може да има съответна стойност и можем да преведем всеки текст в съответния еквивалент.

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

В този бърз урок видяхме общ преглед на това какво представлява Apache Commons Text и някои от общите му характеристики.

Кодните образци могат да бъдат намерени в GitHub.