Как предполагает kdgregory, использование StringBuilder
, вероятно, будет более простым способом работы со строками.
Поскольку я не совсем уверен, является ли число символов до вставки новой строки словом до или после 30 символов, я решил использовать слово после 30 символов, поскольку реализация, вероятно, проще.
Подход заключается в том, чтобы найти экземпляр " "
, который появляется по крайней мере через 30 символов после текущего символа, который просматривается, с помощью StringBuilder.indexOf
. Когда появляется пробел, \n
вставляется StringBuilder.insert
.
(Мы будем предполагать, что новая строка здесь \n
- фактический разделитель строк, используемый в текущей среде, можно получить с помощью System.getProperty("line.separator");
).
Вот пример:
String s = "A very long string containing " +
"many many words and characters. " +
"Newlines will be entered at spaces.";
StringBuilder sb = new StringBuilder(s);
int i = 0;
while ((i = sb.indexOf(" ", i + 30)) != -1) {
sb.replace(i, i + 1, "\n");
}
System.out.println(sb.toString());
Результат:
A very long string containing many
many words and characters. Newlines
will.
Я должен добавить, что приведенный выше код не был протестирован, за исключением примера String
, который я показал в коде. Не было бы слишком удивительно, если бы это не работало при определенных обстоятельствах.
Редактировать
Цикл в примере кода заменен циклом while
, а не циклом for
, который не очень подходит в этом примере.
Кроме того, метод StringBuilder.insert
был заменен методом StringBuilder.replace
, как Кевин Стич отметил в комментариях, что вместо * используется метод replace
1046 * чтобы получить желаемое поведение.