1

我有一个名为raw. 我正在尝试将其拆分为这样的数组:

lines = raw.split("\\r?\\n|\\r");

这在前几次出现时效果很好,但随后它会中断并完全丢失字符串的其余部分。例如 raw isThis is my string\n\nThis is a new paragraph\nThis is another line和 become {"This is my string", "", "This is a new paragraph"}。这是Java中的错误还是我做错了什么?我该如何解决?

编辑:我确实想保留空白行。 [\\n\\r]+不保留空行

4

4 回答 4

3

我会使用正则表达式:

raw.split("[\\r\\n]+");
于 2013-10-30T20:20:15.327 回答
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()本身。

于 2013-10-30T20:22:22.190 回答
0

你可以清理那个正则表达式:

[\\n\\r]+

+ 表示它会在拆分之前尽可能地寻找空格

您尝试查看答案或其他内容的方式可能很重要,如果您显示一些代码,我可以为您提供更多帮助。

如果您想保留空格,请尝试

(?=[\\n\\r]+)
于 2013-10-30T20:25:22.433 回答
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]
于 2013-10-30T20:26:43.610 回答