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

Проверьте, заканчивается ли строка определенным шаблоном в Java

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

1. Обзор

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

Во-первых, мы начнем с рассмотрения решений, использующих ядро Java. Затем мы продемонстрируем, как сделать то же самое с помощью внешних библиотек.

2. Использование класса String

Проще говоря, String предоставляет несколько удобных опций для проверки того, заканчивается ли данная строка определенной подстрокой.

Рассмотрим подробнее каждый вариант.

2.1. Строка # заканчивается методом

Этот метод вводится обычно для этой цели. Он предлагает самый простой способ проверить, заканчивается ли объект String другой строкой .

Итак, давайте посмотрим на это в действии:

public static boolean usingStringEndsWithMethod(String text, String suffix) {
if (text == null || suffix == null) {
return false;
}
return text.endsWith(suffix);
}

Обратите внимание, что endWith не является нулевым. Итак, сначала нам нужно убедиться, что текст и суффикс не равны нулю , чтобы избежать исключения NullPointerException .

2.2. Строка# соответствует методу

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

По сути, все, что нам нужно сделать, это указать регулярное выражение, которое правильно работает для нашего варианта использования:

public static boolean usingStringMatchesMethod(String text, String suffix) {
if (text == null || suffix == null) {
return false;
}
String regex = ".*" + suffix + "$";
return text.matches(regex);
}

Как мы видим, мы использовали регулярное выражение, которое соответствует суффиксу в конце ( $ ) нашей строки text . Затем мы передали регулярное выражение методу match .

2.3. String# метод regionMatches

Точно так же мы можем использовать метод regionMatches для решения нашего центрального вопроса. Он возвращает true , если часть строки точно соответствует указанной строке, и возвращает false в противном случае .

Теперь давайте проиллюстрируем это на примере:

public static boolean usingStringRegionMatchesMethod(String text, String suffix) {
if (text == null || suffix == null) {
return false;
}
int toffset = text.length() - suffix.length();
return text.regionMatches(toffset, suffix, 0, suffix.length());
}

toffset обозначает начальное смещение субрегиона в нашей строке. Таким образом, чтобы проверить, заканчивается ли текст указанным суффиксом , значение смещения должно быть равно длине текста минус длина суффикса .

3. Использование класса Pattern

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

Без дальнейших церемоний давайте повторно используем то же регулярное выражение, которое мы указали в предыдущем разделе:

public static boolean usingPatternClass(String text, String suffix) {
if (text == null || suffix == null) {
return false;
}
Pattern pattern = Pattern.compile(".*" + suffix + "$");
return pattern.matcher(text).find();
}

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

4. Использование Apache Commons Lang

Apache Commons Lang предоставляет набор готовых к использованию служебных классов для работы со строками. Среди этих классов мы находим StringUtils .

Этот служебный класс поставляется с интересным методом, называемым endWith. Он проверяет, заканчивается ли последовательность символов суффиксом нулевым способом .

Теперь давайте продемонстрируем использование метода StringUtils.endsWith :

public static boolean usingApacheCommonsLang(String text, String suffix) {
return StringUtils.endsWith(text, suffix);
}

5. Вывод

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

Во-первых, мы увидели несколько способов добиться этого с помощью встроенных классов Java. Затем мы объяснили, как сделать то же самое, используя библиотеку Apache Commons Lang.

Как всегда, код, использованный в этой статье, можно найти на GitHub .