Есть задача. Метод принимает строку (длинную) и должен распечатать ее построчно так, чтобы длина каждой выводимой строки была не больше 13 символов и слова не разбивались (перенос только на пробелах). Сделал через циклы, но как то очень монструозно, вот чувствую, что можно использовать рекурсию, но не могу понять как.
Пример Ввод
Four score and seven years ago our fathers brought forth upon this continent a new nation,conceived in liberty and dedicated to the proposition that all men are created equal
Вывод
Four score
and seven
years ago
our fathers
brought
forth upon
this
continent a
new nation,
conceived in
liberty and
dedicated to
the
proposition
that all men
are created
equal
Вот возможное решение на рекурсии:
public static void main(String[] args) {
final String source = "Four score and seven years ago our fathers brought forth upon this continent a new nation";
print(13, source.split("\\s"), 0);
}
static void print(final int length, final String[] tokens, int start) {
final StringBuilder line = new StringBuilder();
while (start < tokens.length) {
final String token = tokens[start];
if (line.length() == 0 || line.length() + 1 + token.length() < length) {
start++;
if (line.length() > 0) {
line.append(' ');
}
line.append(token);
} else {
break;
}
}
System.out.println(line.toString());
if (start < tokens.length) {
print(length, tokens, start);
}
}
Но, если у вас есть возможность использовать сторонние библиотеки, то советую взять WordUtils#wrap
:
public static void main(String[] args) {
final String source = "Four score and seven years ago our fathers brought forth upon this continent a new nation";
System.out.println(WordUtils.wrap(source, 13 - 1));
}
намного короче и проще. Хочу заметить, что в реализации WordUtils#wrap
используются циклы, а не рекурсия, и эта реализация достаточно "монструозна".
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется listview который выводит n строк, нужно как-то сделать так, чтобы при прокрутке этого списка, первая его строка всегда была на виду, те
Необходимо создать кнопку на сайте при клике на которую будет добавляться vCard(новый контакт в телефоне пользователя)Не могу найти нигде описание...
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском