我有一个名为raw
的字符串。我试图将它分成如下数组:
lines = raw.split("\\r?\\n|\\r");
这适用于前几次出现,但随后它会中断并完全丢失其余的字符串。例如。 raw是This is my string\n\nThis is a new paragraph\nThis is another line
,变为{"This is my string", "", "This is a new paragraph"}
。这是Java中的错误还是我做错了什么?我该如何解决?
编辑:我确实想留空行。 [\\n\\r]+
不保留空行
答案 0 :(得分:3)
我会使用正则表达式:
raw.split("[\\r\\n]+");
答案 1 :(得分:2)
您的代码按预期工作:
class Test {
public static void main(String[] args) {
String raw = "This is my string\n\nThis is a new paragraph\nThis is another line";
String[] lines = raw.split("\\r?\\n|\\r");
for (String line : lines) {
System.out.println(line);
}
}
}
打印:
This is my string
This is a new paragraph
This is another line
因此问题可能在于您如何检查/显示split()
的结果,而不是split()
本身。
答案 2 :(得分:0)
你可以清理那个正则表达式:
[\\n\\r]+
+意味着它将在分割之前尽可能地寻找空白
你是如何尝试查看答案或其他内容的可能性很大,如果你展示一些代码,我可以帮你更多。
如果您想保留空格,请尝试
(?=[\\n\\r]+)
答案 3 :(得分:0)
您可以使用“多行”标记,只需在行尾分割:
lines = raw.split("(?m)$\\s*");
术语\s*
使用换行符。
这是一些测试代码:
String raw = "This is my string\n\nThis is a new paragraph\nThis is another line";
String[] lines = raw.split("(?m)$\\s*");
System.out.println(Arrays.toString( lines));
输出:
[This is my string, This is a new paragraph, This is another line]