1. Обзор
В этом кратком руководстве мы собираемся изучить различные методы удаления последнего символа строки.
2. Использование String.substring()
Самый простой способ — использовать встроенный метод substring()
класса String
.
Чтобы удалить последний символ данной строки,
мы должны использовать два параметра: 0
в качестве начального индекса и индекс предпоследнего символа. Мы можем добиться этого, вызвав метод String
length()
и вычтя 1
из результата.
Однако этот метод не является нулевым, и если мы используем пустую строку, это не удастся.
Чтобы преодолеть проблемы с нулевыми и пустыми строками, мы можем обернуть метод во вспомогательный класс:
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);
}
3. Использование StringUtils.substring()
Вместо того, чтобы изобретать велосипед, мы можем использовать класс StringUtils
из библиотеки Apache Commons Lang3 , который предлагает полезные операции со строками .
Один из них — нулевой безопасный метод substring()
, который обрабатывает исключения.
Чтобы включить 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);
Опять же, эта операция не является нулевой. Это будет нормально работать с пустыми строками
.
4. Использование StringUtils.chop()
Класс StringUtils
предоставляет метод Chop ()
, который хорошо работает со всеми пограничными сценариями: пустыми и нулевыми строками .
Он очень прост в использовании и требует только одного параметра: String.
Его единственная цель — удалить последний символ, ни больше, ни меньше:
StringUtils.chop(TEST_STRING);
5. Использование регулярных выражений
Мы также можем удалить последний символ (или любое количество символов) из строки
, хорошо используя регулярные выражения.
Например, мы можем использовать метод replaceAll()
самого класса String
, который принимает два параметра: регулярное выражение и замещающую строку
:
TEST_STRING.replaceAll(".$", "");
Обратите внимание: поскольку мы вызываем метод для String,
операция не является нулевой .
Кроме того, 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);
}
6. Заключение
В этой краткой статье мы обсудили разные способы удаления только последнего символа строки,
какие-то ручные, а какие-то готовые из коробки.
Если нам нужна большая гибкость и нам нужно удалить больше символов, мы можем использовать более продвинутое решение с регулярными выражениями.
Как всегда, код, использованный в статье, можно найти на GitHub .