有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有以下字符串:

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中的空字符串?一、 当然,我可以编写一段多行代码,但在我浪费时间尝试实现它之前,我想知道是否有一个简单的方法或额外的两行左右的代码来帮助我。谢谢


共 (3) 个答案

  1. # 1 楼答案

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

    String strArray[] = str.split("\n", Integer.MAX_VALUE);
    
  2. # 2 楼答案

    使用str.split("\n", -1)(带有负limit参数)。当split被赋予零或无limit参数时,它会丢弃尾随的空字段,当它被赋予正limit参数时,它会将字段的数量限制在该数量,但限制意味着允许任何数量的字段,而不会丢弃尾随的空字段。这是有文档记录的here,行为取自Perl

  3. # 3 楼答案

    就我个人而言,我喜欢用番石榴来切肉:

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

    然后,如果要配置空字符串行为,可以这样做:

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