Як видалити останній символ рядка?

1. Огляд

У цій короткій статті ми збираємось перевірити та обговорити різні методи видалення останнього символу рядка.

2. Використання String.substring ()

Найпростіший спосіб полягає у використанні вбудованого в підрядку () методу в Струнному класі.

Для того, щоб видалити останній символ даного рядка, ми повинні використовувати два параметри: 0 як початковий індекс та індекс передостаннього символу. Ми можемо досягти цього, викликавши метод String 's length () і віднявши 1 з результату.

Однак цей метод не є нульовим, і якщо ми використовуємо порожній рядок, це не вдасться.

Щоб подолати проблеми з нульовими та порожніми рядками, ми можемо обернути метод у допоміжний клас:

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 бібліотеки, що пропонує корисні рядкові операції. Одним з них є нуль-безпечний метод substring () , який обробляє винятки.

Щоб включити StringUtils, нам потрібно оновити файл pom.xml :

 org.apache.commons commons-lang3 3.0 

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(".$", "");

Зверніть увагу , що, тому що ми називаємо метод на рядки - операція, звичайно, НЕ нуль-безпечна .

Крім того, вираз 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.