1. Общ преглед
В тази бърза статия ще проверим и обсъдим различни техники за премахване на последния знак от низ.
2. Използване на String.substring ()
Най-лесният начин е да се използва вграденият метод substring () от класа String .
За да премахнем последния знак от даден низ, трябва да използваме два параметъра: 0 като начален индекс и индекс на предпоследния знак. Ние можем да постигнем това чрез обаждане String е дължина () метод и изваждане един от резултата.
Въпреки това, този метод не е нула-безопасно и ако използваме празен низ това ще се провалят.
За да преодолеем проблеми с нулеви и празни низове, можем да обгърнем метода в помощен клас:
public static String removeLastChar(String s)
Можем да рефакторираме кода и да използваме 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 операции. Един от тях е нулево безопасен метод substring () , който обработва изключения.
За да включим StringUtils , трябва да актуализираме нашия файл pom.xml :
org.apache.commons commons-lang3 3.0
StringUtils.substring () изисква три параметъра: даден String, индекс на първия символ (в нашия случай той винаги ще бъде 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 - който отнема два параметъра: регулярен израз и заместващия 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.