我目前正在尝试将字符串拼接成多行字符串。 正则表达式应该选择之前有13个字符的空格。
问题是13个字符计数在前一个选定的空格后没有重置。因此,在前13个字符之后,正则表达式选择每个空格。
我使用以下正则表达式,其中positive look-behind
为13个字符:
(?<=.{13})
(最后有一个空格)
您可以测试正则表达式here和以下代码:
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);
}
}
}
此代码的输出如下:
这是一个测试 该
应用
应该
打破
这
串
在
子
在
空格
后 13个
字符
但它应该是:
这是一个测试 该应用程序应该是 打破这个字符串
在子字符串上 wh之后的空白 13个字符
答案 0 :(得分:5)
您实际上可以使用延迟限制量词来匹配这些行,然后替换为$0\n
:
.{13,}?[ ]
请参阅regex demo
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"));
请注意,模式匹配:
.{13,}?
- 任何不是换行符的字符(如果你需要匹配任何字符,使用DOTALL修饰符,虽然我怀疑你在当前场景中需要它),至少13次,它可以匹配更多字符,但遇到第一个空格[ ]
- 一个文字空间(一个字符类是多余的,但它有助于可视化模式)。替换模式 - "$0\n"
- 重新插入整个匹配值(它存储在组0中)并在其后附加换行符。
答案 1 :(得分:3)
您可以在空格之前匹配并捕获13个字符,而不是分割。
Java代码:
Pattern p = Pattern.compile( "(.{13}) +" );
Matcher m = p.matcher( text );
List<String> matches = new ArrayList<>();
while(m.find()) {
matches.add(m.group(1));
}
它会产生:
This is a test.
The app should
break this string
in substring on
whitespaces after
13 characters
答案 2 :(得分:0)
您可以使用.split并使用正则表达式执行此操作。就像这样
line.split("\\s+");
这将使每个单词溢出一个或多个空格。