Как было предложено 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
, Кевин Stich упоминалось в комментариях, что метод replace
был использован вместо insert
, чтобы получить желаемое поведение.
Итак, в чем вопрос? Это работает или нет? –
Извините, это НЕ работает, я отредактирую вопрос –
Кстати, правильная заглавная буква - «Java», а не «JAVA», но тег обычно достаточен, чтобы люди знали, какую платформу вас интересуют. – erickson