Java: String split():我希望它在末尾包含空字符串

2022-08-31 11:50:53

我有以下字符串:

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"

如何使该方法包含像输出A中的空字符串一样?当然,我可以写一段多行代码,但在我浪费时间尝试实现它之前,如果有一个简单的方法或额外的两行左右的代码来帮助我,我想知道。谢谢!split()


答案 1

使用(带否定参数)。当给定零个参数或没有参数时,它会丢弃尾随的空字段,当它被赋予一个正参数时,它会将字段数限制为该数字,但限制意味着允许任意数量的字段,并且不会丢弃尾随的空字段。这里记录了这一,行为取自 Perl。str.split("\n", -1)limitsplitlimitlimit


答案 2

单参数拆分方法指定为忽略尾随的空字符串拆分,但采用“limit”参数的版本会保留它们,因此一种选择是使用具有较大限制的版本。

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