Java:String split():我希望它包含在最后的空string

我有以下string:

String str = "\nHERE\n\nTHERE\n\nEVERYWHERE\n\n"; 

如果你只是打印这个,它会像这样输出(当然, \n不会“字面上”打印):

 \n HERE\n \n THERE\n \n EVERYWHERE\n \n \n 

当我调用方法split("\n") ,我希望获得新行( \n )字符之间的所有string,即使是空string也是如此。

例如,如果我今天这样做:

 String strArray[] = str.split("\n"); System.out.println("strArray.length - " + strArray.length); for(int i = 0; i < strArray.length; i++) System.out.println("strArray[" + i + "] - \"" + strArray[i] + "\""); 

我想要这样打印出来(输出A):

 strArray.length - 8 strArray[0] - "" strArray[1] - "HERE" strArray[2] - "" strArray[3] - "THERE" strArray[4] - "" strArray[5] - "EVERYWHERE" strArray[6] - "" strArray[7] - "" 

目前,它打印像这样(输出B),并跳过任何结束空string:

 strArray.length - 6 strArray[0] - "" strArray[1] - "HERE" strArray[2] - "" strArray[3] - "THERE" strArray[4] - "" strArray[5] - "EVERYWHERE" 

如何使split()方法包含输出A中的空string? 当然,我可以编写一个多行代码,但是在我浪费时间试图实现这些代码之前,如果有一个简单的方法或者额外的两行代码来帮助我,我会想知道的。 谢谢!

使用str.split("\n", -1) (带有负limit参数)。 当split被赋予零或者没有limit参数时,它丢弃尾随的空字段,并且当它被赋予一个正的limit参数时,它将字段的数量限制到该数字,但是一个负数限制意味着允许任意数量的字段而不丢弃尾随的空字段。 这是logging在这里 ,行为取自Perl。

指定单参数拆分方法忽略尾随的空string拆分,但采用“限制”参数的版本会保留它们,因此一种select是使用该限制较大的版本。

 String strArray[] = str.split("\n", Integer.MAX_VALUE); 

就我个人而言,我喜欢番石榴工具分裂:

 System.out.println(Iterables.toString( Splitter.on('\n').split(input))); 

那么如果你想configuration空string的行为,你可以这样做:

 System.out.println(Iterables.toString( Splitter.on('\n').omitEmptyStrings().split(input)));