Java String split()丢失字符串

时间:2013-10-30 20:17:57

标签: java string split

我有一个名为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]+不保留空行

4 个答案:

答案 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]