Encodera

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

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

Как обрезать строку до нужной длины

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

Возьмите начало строки через substring(), ограничив длину через Math.min():

void main() {
    String text = "Hello, World";
    IO.println(text.substring(0, Math.min(text.length(), 5)));
}

Результат:

Hello

С многоточием

Добавляйте многоточие, только если строка действительно длиннее лимита:

String truncate(String text, int max) {
    return text.length() <= max ? text : text.substring(0, max - 1) + "…";
}
 
void main() {
    IO.println(truncate("A very long title", 10));
    IO.println(truncate("Short", 10));
}

Результат:

A very lo…
Short

По границе слова

Чтобы не резать слово пополам, найдите последний пробел перед лимитом:

String truncateWords(String text, int max) {
    if (text.length() <= max) {
        return text;
    }
    int space = text.lastIndexOf(' ', max);
    return (space > 0 ? text.substring(0, space) : text.substring(0, max)) + "…";
}
 
void main() {
    IO.println(truncateWords("Learn Java step by step", 12));
}

Результат:

Learn Java…

Частая ошибка

Вызвать substring(0, max) у строки короче лимита:

void main() {
    String text = "Hi";
    IO.println(text.substring(0, 5));
}

Результат:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [0, 5) out of bounds for length 2

Ограничивайте конец через Math.min(text.length(), max).

Функции из этого ответа

  • String.substring() — Возвращает часть строки между двумя индексами.
  • String.length() — Возвращает количество символов в строке.
  • Math.min() — Возвращает меньшее из двух чисел.

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

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