JAVA - 在30个字符后的下一个空格处插入一个新行

Kev*_*ich 3 java string newline

我有一大块文本(字符串中有200多个字符),需要在30个字符后的下一个空格处插入新行,以保留单词.这是我现在拥有的(不工作):

String rawInfo = front.getItemInfo(name);
String info = "";
int begin = 0;
for(int l=30;(l+30)<rawInfo.length();l+=30) {
    while(rawInfo.charAt(l)!=' ')
        l++;
    info += rawInfo.substring(begin, l) + "\n";
    begin = l+1;
    if((l+30)>=(rawInfo.length()))
        info += rawInfo.substring(begin, rawInfo.length());
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

coo*_*ird 18

正如kdgregory所建议的,使用a StringBuilder可能是一种更简单的方法来处理字符串操作.

由于我不太确定插入换行符之前的字符数是30个字符之前还是之后的字,我选择在30个字符后面找到该字,因为实现可能更容易.

方法是找到" "在使用当前字符后至少30个字符的实例StringBuilder.indexOf.当出现空格时,\n插入a 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());
Run Code Online (Sandbox Code Playgroud)

结果:

A very long string containing many
many words and characters. Newlines
will.

我应该补充一点,上面的代码还没有测试过,除了String我在代码中显示的例子.如果它在某些情况下不起作用,那就太不足为奇了.

编辑

示例代码中的while循环已被循环而不是for循环替换,这在本示例中不太合适.

此外,该StringBuilder.insert方法被该方法所取代StringBuilder.replace,正如Kevin Stich在评论中提到的那样,使用该replace方法而不是insert获得所需的行为.