Как обрезать строку до нужной длины
Короткий ответ
Возьмите начало строки через 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() — Возвращает меньшее из двух чисел.