在Java中以字为单位包装多个字符后的字符串

Suv*_*kar 17 java

我有这个代码:

    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 + 20)) != -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 be entered at spaces.
Run Code Online (Sandbox Code Playgroud)

上面的代码将字符串包装在每30个字符的下一个空格之后,但我需要将字符串包装在每30个字符的前一个空格之后,就像它的第一行一样:

A very long string

第二行将是

containing many
Run Code Online (Sandbox Code Playgroud)

请给出一些适当的解决方案

Emi*_*mil 26

您可以使用Apache-common的 WordUtils.wrap().

  • 可以从http://commons.apache.org/proper/commons-lang/download_lang.cgi下载 (8认同)

vit*_*aut 15

使用lastIndexOf而不是indexOf,例如

StringBuilder sb = new StringBuilder(s);

int i = 0;
while (i + 20 < sb.length() && (i = sb.lastIndexOf(" ", i + 20)) != -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 be
entered at spaces.
Run Code Online (Sandbox Code Playgroud)