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 .