Перейти к основному содержимому

Обработка строк с помощью Apache Commons Lang 3

· 4 мин. чтения

1. Обзор

Библиотека Apache Commons Lang 3 обеспечивает поддержку манипулирования основными классами API Java. Эта поддержка включает методы для обработки строк, чисел, дат, параллелизма, отражения объектов и многого другого.

Помимо общего введения в библиотеку, в этом руководстве демонстрируются методы класса StringUtils , которые используются для манипулирования экземплярами String .

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

Чтобы использовать библиотеку Commons Lang 3, просто извлеките ее из центрального репозитория Maven, используя следующую зависимость:

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>

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

3. Строковые утилиты

Класс StringUtils предоставляет методы для нулевых операций со строками.

Многие методы этого класса имеют соответствующие методы, определенные в классе java.lang.String , которые не являются нулевыми . Однако в этом разделе вместо этого основное внимание будет уделено нескольким методам, не имеющим эквивалентов в классе String .

4. Метод containsAny

Метод containsAny проверяет, содержит ли заданная строка какой-либо символ из заданного набора символов. Этот набор символов может быть передан в виде String или char varargs.

Следующий фрагмент кода демонстрирует использование двух перегруженных разновидностей этого метода с проверкой результата:

String string = "foreach.com";
boolean contained1 = StringUtils.containsAny(string, 'a', 'b', 'c');
boolean contained2 = StringUtils.containsAny(string, 'x', 'y', 'z');
boolean contained3 = StringUtils.containsAny(string, "abc");
boolean contained4 = StringUtils.containsAny(string, "xyz");

assertTrue(contained1);
assertFalse(contained2);
assertTrue(contained3);
assertFalse(contained4);

5. Метод containsIgnoreCase

Метод containsIgnoreCase проверяет, содержит ли данная строка другую строку без учета регистра.

Следующий фрагмент кода проверяет, что строка «foreach.com» содержит «FOREACH» , когда верхний и нижний регистр игнорируются:

String string = "foreach.com";
boolean contained = StringUtils.containsIgnoreCase(string, "FOREACH");

assertTrue(contained);

6. Метод countMatches

Метод counterMatches подсчитывает, сколько раз символ или подстрока появляется в заданной строке.

Ниже приведена демонстрация этого метода, подтверждающая, что «w» встречается четыре раза, а «com» — дважды в строке «добро пожаловать на www.foreach.com » :

String string = "welcome to www.foreach.com";
int charNum = StringUtils.countMatches(string, 'w');
int stringNum = StringUtils.countMatches(string, "com");

assertEquals(4, charNum);
assertEquals(2, stringNum);

7. Добавление и добавление метода

Методы appendIfMissing и appendIfMissingIgnoreCase добавляют суффикс в конец заданной строки , если она еще не заканчивается каким-либо из переданных суффиксов с учетом регистра и без учета регистра соответственно.

Точно так же методы prependIfMissing и prependIfMissingIgnoreCase добавляют префикс к началу заданной строки , если она не начинается ни с одним из переданных префиксов.

В следующем примере методы appendIfMissing и prependIfMissing используются для добавления суффикса и префикса к строке «foreach.com» без повторения этих аффиксов:

String string = "foreach.com";
String stringWithSuffix = StringUtils.appendIfMissing(string, ".com");
String stringWithPrefix = StringUtils.prependIfMissing(string, "www.");

assertEquals("foreach.com", stringWithSuffix);
assertEquals("www.foreach.com", stringWithPrefix);

8. Метод изменения регистра

Класс String уже определяет методы для преобразования всех символов строки в верхний или нижний регистр. В этом подразделе показано только использование методов, изменяющих регистр String другими способами, включая swapCase , capitalize и uncapitalize .

Метод swapCase меняет регистр строки, изменяя верхний регистр на нижний и нижний на верхний:

String originalString = "foreach.COM";
String swappedString = StringUtils.swapCase(originalString);

assertEquals("FOREACH.com", swappedString);

Метод capitalize преобразует первый символ заданной строки в верхний регистр, оставляя все остальные символы без изменений:

String originalString = "foreach";
String capitalizedString = StringUtils.capitalize(originalString);

assertEquals("ForEach", capitalizedString);

Метод uncapitalize преобразует первый символ заданной строки в нижний регистр, оставляя все остальные символы без изменений:

String originalString = "ForEach";
String uncapitalizedString = StringUtils.uncapitalize(originalString);

assertEquals("foreach", uncapitalizedString);

9. Реверсивный метод

Класс StringUtils определяет два метода обращения строк: reverse и reverseDelimited . Метод reverse переставляет все символы строки в обратном порядке, а метод reverseDelimited переупорядочивает группы символов, разделенные указанным разделителем.

Следующий фрагмент кода переворачивает строку «foreach» и проверяет результат:

String originalString = "foreach";
String reversedString = StringUtils.reverse(originalString);

assertEquals("gnudleab", reversedString);

При использовании метода reverseDelimited символы меняются местами группами, а не по отдельности:

String originalString = "www.foreach.com";
String reversedString = StringUtils.reverseDelimited(originalString, '.');

assertEquals("com.foreach.www", reversedString);

10. Метод rotate ()

Метод rotate() циклически сдвигает символы строки на несколько позиций. Фрагмент кода ниже перемещает все символы строки «foreach» на четыре позиции вправо и проверяет результат:

String originalString = "foreach";
String rotatedString = StringUtils.rotate(originalString, 4);

assertEquals("dungbael", rotatedString);

11. Метод разницы

Метод разницы сравнивает две строки, возвращая остаток второй строки, начиная с позиции, в которой она отличается от первой. Следующий фрагмент кода сравнивает две строки: «ForEach Tutorials» и «ForEach Courses» в обоих направлениях и проверяет результат:

String tutorials = "ForEach Tutorials";
String courses = "ForEach Courses";
String diff1 = StringUtils.difference(tutorials, courses);
String diff2 = StringUtils.difference(courses, tutorials);

assertEquals("Courses", diff1);
assertEquals("Tutorials", diff2);

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

В этом руководстве представлена обработка строк в Apache Commons Lang 3 и рассмотрены основные API-интерфейсы, которые мы можем использовать вне класса библиотеки StringUtils .

Как всегда, реализацию всех приведенных выше примеров и фрагментов кода можно найти в проекте GitHub .