2013-10-30 47 views
1

我有一个名为raw的字符串。我想将它拆分成一个数组,像这样:Java String split()丢失字符串

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

这非常适用于前几个事件,而是那么它打破,完全失去了字符串的其余部分。例如。原始为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

随着你输入你的'split',我得到的4个项目,符合市场预期:'{“这是我的字符串“,”“,”这是一个新的段落“,”这是另一条线“。 – rgettman

回答

3

我会用正则表达式:

raw.split("[\\r\\n]+"); 
+0

谢谢,但这仍然不能解决我的问题,字符串仍然丢失,我确实想保留空白行。 – Sag73

+0

请发布更多的字符串(不是3行)和期望的输出 –

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()的结果,而不是t他本身就是split()

0

你可以清理正则表达式liek这样的:

[\\n\\r]+ 

的+意味着它会寻找空白尽可能它可以分裂

机会之前,有一个在你是如何想大查看答案或其他内容,如果您显示一些代码,我可以帮助您更多。如果你想

保持空间,尝试

(?=[\\n\\r]+) 
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]