Как удалить последний символ строки
Короткий ответ
Возьмите подстроку без последнего символа:
void main() {
String text = "Hello!";
IO.println(text.substring(0, text.length() - 1));
}Результат:
HelloТолько если это нужный символ
Чаще нужно удалить конкретный хвост — например, лишнюю запятую:
void main() {
String list = "a, b, c, ";
String trimmed = list.strip();
if (trimmed.endsWith(",")) {
trimmed = trimmed.substring(0, trimmed.length() - 1);
}
IO.println(trimmed);
}Результат:
a, b, cВ StringBuilder
Если строка собирается в StringBuilder, удалите символ прямо в нём:
void main() {
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++) {
builder.append(i).append(",");
}
builder.deleteCharAt(builder.length() - 1);
IO.println(builder);
}Результат:
1,2,3А ещё лучше вообще не ставить лишний разделитель — для этого есть String.join() и StringJoiner.
Частая ошибка
Вызвать код на пустой строке — length() - 1 даёт -1:
void main() {
String text = "";
IO.println(text.substring(0, text.length() - 1));
}Результат:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [0, -1) out of bounds for length 0Проверьте !text.isEmpty() перед удалением.
Функции из этого ответа
- String.substring() — Возвращает часть строки между двумя индексами.
- String.length() — Возвращает количество символов в строке.
- StringBuilder.deleteCharAt() — Удаляет один символ по индексу. Для диапазона есть delete(start, end).
- String.endsWith() — Проверяет, заканчивается ли строка указанным суффиксом.