В этом кратком руководстве изучим различные способы удаления последнего символа строки.
Использование String.substring()
Самый простой способ – использовать встроенный метод substring() класса String.
Чтобы удалить последний символ данной строки, необходимо использовать два параметра: 0 в качестве начального индекса и индекс предпоследнего символа. Можно добиться этого, вызвав метод length() у String и вычтя 1 из результата.
Однако этот метод не проверяет на null. Если используем пустую строку, это не удастся.
Чтобы преодолеть проблемы с null и пустыми строками, можно обернуть метод во вспомогательный класс:
public static String removeLastChar(String s) {
return (s == null || s.length() == 0)
? null
: (s.substring(0, s.length() - 1));
}
Можно переделать код, используя Java 8:
public static String removeLastCharOptional(String s) {
return Optional.ofNullable(s)
.filter(str -> str.length() != 0)
.map(str -> str.substring(0, str.length() - 1))
.orElse(s);
}
Использование StringUtils.substring()
Вместо того, чтобы изобретать велосипед, можно использовать класс StringUtils из библиотеки Apache Commons Lang3, который предлагает полезные операции со строками. Одна из них – метод substring(), безопасный для null, который обрабатывает исключения.
Чтобы включить StringUtils, необходимо обновить файл pom.xml:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
StringUtils.substring() требует три параметра: данная строка, индекс первого символа (в нашем случае всегда будет 0) и индекс предпоследнего символа. Можно просто использовать метод length() и вычесть 1:
String TEST_STRING = "abcdef";
StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);
Эта операция не делает проверку на null. Она будет нормально работать с пустыми строками.
Использование StringUtils.chop()
Класс StringUtils предоставляет метод Chop(), который хорошо работает со всеми пограничными сценариями: пустыми строками и с null.
Он очень прост в использовании и требует только одного параметра: String. Его единственная цель – удалить последний символ, ни больше, ни меньше:
StringUtils.chop(TEST_STRING);
Использование регулярных выражений
Можно удалить последний символ (или любое количество символов) из строки, правильно используя регулярные выражения.
Например, можно использовать метод replaceAll() самого класса String, который принимает два параметра: регулярное выражение и замещающую строку:
TEST_STRING.replaceAll(".$", "");
Обратите внимание: поскольку мы вызываем метод для строки, операция не защищена от null.
Кроме того, replaceAll() и регулярные выражения могут показаться сложными на первый взгляд. Можно прочитать больше о регулярных выражениях здесь, но чтобы сделать логику более удобной для пользователя, можно обернуть ее во вспомогательный класс:
public static String removeLastCharRegex(String s) {
return (s == null) ? null : s.replaceAll(".$", "");
}
Обратите внимание, что если строка заканчивается новой строкой, то описанный выше метод завершится ошибкой, поскольку «.» в регулярном выражении соответствует любому символу, кроме разделителей строк.
Наконец, перепишем реализацию с помощью Java 8:
public static String removeLastCharRegexOptional(String s) {
return Optional.ofNullable(s)
.map(str -> str.replaceAll(".$", ""))
.orElse(s);
}
Заключение
В этой краткой статье обсудили разные способы удаления последнего символа строки, какие-то вручную, а какие-то готовые из коробки. Если нужна большая гибкость и нужно удалить больше символов, можно использовать более продвинутое решение с регулярными выражениями.
Код, использованный в статье, можно найти на GitHub.