Перейти к содержанию

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

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

Использование 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.

Оригинал