在空格上拆分字符串

Seb*_*lor 5 java regex string

我正在尝试将字符串拼接成多行字符串.正则表达式应该选择之前有13个字符的空格.

问题是13个字符计数在前一个选定的空格后没有重置.因此,在前13个字符之后,正则表达式选择每个空格.

我正在使用以下正则表达式,其中positive look-behind包含13个字符:

(?<=.{13}) 
Run Code Online (Sandbox Code Playgroud)

(最后有一个空格)

你可以在这里测试正则表达式和以下代码:

import java.util.ArrayList;
public class HelloWorld{

     public static void main(String []args){
        String str = "This is a test. The app should break this string in substring on whitespaces after 13 characters";

        for (String string : str.split("(?<=.{13}) ")) {
            System.out.println(string);
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

此代码的输出如下:

这是一个测试.

应用程序
应该
打破
这个
字符串

子串

的空格,

13
个字符

但它应该是:

这是一个测试.
应用程序应该 在 13个字符后的空格 中的子
字符串
中打破此字符串

Wik*_*żew 5

实际上,您可以使用惰性限制量词来匹配行,然后替换为$0\n:

.{13,}?[ ]
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

IDEONE演示:

String str = "This is a test. The app should break this string in substring on whitespaces after 13 characters"; 
System.out.println(str.replaceAll(".{13,}?[ ]", "$0\n"));
Run Code Online (Sandbox Code Playgroud)

请注意,模式匹配:

  • .{13,}? - 任何不是换行符的字符(如果你需要匹配任何字符,使用DOTALL修饰符,虽然我怀疑你在当前场景中需要它),至少13次,并且它可以匹配更多字符,但直到第一个空格遇到
  • [ ] - 文字空间(字符类是多余的,但它有助于可视化模式).

替换模式 - "$0\n"- 重新插入整个匹配值(它存储在组0中)并在其后添加换行符.