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

Как удалить последний символ строки?

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

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 .