我有以下字符串:
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 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),并且跳过任何结束的空字符串:
strArray.length - 6
strArray[0] - ""
strArray[1] - "HERE"
strArray[2] - ""
strArray[3] - "THERE"
strArray[4] - ""
strArray[5] - "EVERYWHERE"
如何使split()
方法包含输出A中的空字符串?当然,我可以编写一个多行代码,但想知道,在我浪费时间尝试实现之前,如果有一个简单的方法或额外的两行左右的代码来帮助我。谢谢!
答案 0 :(得分:123)
使用str.split("\n", -1)
(带有limit
个否定参数)。当split
被赋予零或没有limit
参数时,它会丢弃尾随的空字段,当它给出一个肯定的limit
参数时,它会将字段数限制为该数字,但是否定限制意味着允许任意数量的字段,而不是丢弃尾随的空字段。记录here,行为来自Perl。
答案 1 :(得分:7)
指定单参数split方法忽略尾随空字符串拆分,但采用“limit”参数的版本保留它们,因此一个选项是使用具有大限制的版本。
String strArray[] = str.split("\n", Integer.MAX_VALUE);
答案 2 :(得分:3)
就个人而言,我喜欢用于拆分的Guava实用程序:
System.out.println(Iterables.toString(
Splitter.on('\n').split(input)));
然后,如果要配置空字符串行为,可以这样做:
System.out.println(Iterables.toString(
Splitter.on('\n').omitEmptyStrings().split(input)));