12. Вывести текст в консоли в виде рамки
Условие задачи:
Необходимо реализовать метод printFormattedText(String text), который:
разбивает переданную строку на отдельные слова;
выводит каждое слово на новой строке;
выравнивает строки по длине самого длинного слова;
обрамляет результат символами
*.
Код:
public class Task1 {
private static final String TEXT = "I am Java Developer";
public void printFormattedText(String text) {
throw new UnsupportedOperationException("Implemented it!");
}
}
Для строки:
I am Java Developer
ожидаемый вывод:
****************
* I *
* am *
* Java *
* Developer *
****************
Спойлеры к решению
Подсказки
💡 Разбей строку на слова через
💡 Сначала найди длину самого длинного слова.
💡 Верхняя и нижняя границы должны иметь такую же ширину, как строки с текстом.
💡 Для выравнивания слов удобно использовать
split("\\s+").💡 Сначала найди длину самого длинного слова.
💡 Верхняя и нижняя границы должны иметь такую же ширину, как строки с текстом.
💡 Для выравнивания слов удобно использовать
printf() с форматом %-Ns.Решение
public class Task1 {
private static final String TEXT = "I am Java Developer";
public void printFormattedText(String text) {
if (text == null || text.trim().isEmpty()) {
return;
}
String[] words = text.trim().split("\\s+");
int maxLength = 0;
for (String word : words) {
maxLength = Math.max(maxLength, word.length());
}
String border = "*".repeat(maxLength + 7);
System.out.println(border);
for (String word : words) {
System.out.printf(
"* %-" + maxLength + "s *%n",
word
);
}
System.out.println(border);
}
public static void main(String[] args) {
Task1 task = new Task1();
task.printFormattedText(TEXT);
}
}
Сначала строка разбивается на слова:
String[] words = text.trim().split("\\s+");
Затем определяется длина самого длинного слова:
for (String word : words) {
maxLength = Math.max(maxLength, word.length());
}
Для примера самым длинным является:
Developer
его длина — 9.
Строка внутри рамки имеет структуру:
* + 2 пробела + слово + выравнивание + 3 пробела + *
поэтому ширина границы равна:
maxLength + 7
Формат:
"* %-" + maxLength + "s *%n"
выравнивает каждое слово по левому краю до ширины самого длинного слова.
Результат:
****************
* I *
* am *
* Java *
* Developer *
****************
Временная сложность — O(n), где n — количество символов в исходной строке.