Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

Возьмите подстроку без последнего символа:

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() — Проверяет, заканчивается ли строка указанным суффиксом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.