Рубрики
Без рубрики

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

Узнайте, как удалить последний символ строки с помощью core Java или с помощью внешних библиотек.

Автор оригинала: baeldung.

1. Обзор

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

2. Использование String.substring()

Самый простой способ-использовать встроенный substring() метод класса String .

Чтобы удалить последний символ заданной строки , мы должны использовать два параметра: 0 как начальный индекс, так и индекс предпоследнего символа. Мы можем достичь этого, вызвав метод String ‘s length() и вычитая 1 от результата.

Однако этот метод не является безопасным для 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);
    }

3. Использование StringUtils.substring()

Вместо того, чтобы изобретать велосипед, мы можем использовать StringUtils класс из библиотеки Apache Commons Lang3 , которая предлагает полезные String операции. Одним из них является null-безопасный substring() метод , который обрабатывает исключения.

Чтобы включить StringUtils мы должны обновить наш pom.xml файл:


    org.apache.commons
    commons-lang3
    3.11

StringUtils.substring() требует трех параметров: заданной Строки, индекса первого символа (в нашем случае он всегда будет равен 0) и индекса предпоследнего символа. Опять же, мы можем просто использовать метод length() и вычесть 1:

String TEST_STRING = "abcdef";

StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);

Тем не менее, эта операция снова не является безопасной для нуля. Однако он будет работать с пустыми строками нормально.

4. Использование StringUtils.chop()

Класс StringUtils предоставляет метод chop () , который хорошо работает со всеми граничными сценариями: пустыми и нулевыми строками .

Он очень прост в использовании и требует только одного параметра: строки . Его единственная цель-удалить последний символ. Ни больше, ни меньше:

StringUtils.chop(TEST_STRING);

5. Использование Регулярного Выражения

Мы также можем удалить последний символ (или любое количество символов) из строки |, хорошо используя регулярные выражения.

Например, мы можем использовать метод replaceAll() самого класса String , который принимает два параметра: регулярное выражение и замену String :

TEST_STRING.replaceAll(".$", "");

Обратите внимание, что, поскольку мы вызываем метод на String – операция, конечно, небезопасна для null|/.

Кроме того, replace All() и выражение регулярного выражения может быть сложным на первый взгляд. Вы можете прочитать больше о регулярном выражении здесь , но чтобы сделать логику немного более удобной для пользователя, мы можем обернуть ее в вспомогательный класс:

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 .