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 .