使用|时,Java分割在空格处停止作为分隔符

时间:2016-05-19 08:34:49

标签: java split

我正在使用split()拆分String但我不知道为什么它到达空格时会停止。这是代码:

String a = "R|1|^^^fieldname1|18.8H |||||||||";

String[] b = a.split(Pattern.quote("|"));
also tried
String[] b = a.split("\\|");

System.out.println("Array length :"+b.length);

输出为:4

我找不到背后的原因请告诉我我错过了什么。

2 个答案:

答案 0 :(得分:1)

来自javadoc:

  

String.split(String pattern,int limit)

     

limit参数控制模式的次数   应用因此会影响结果数组的长度。如果   限制n大于零,那么模式将应用于   大多数n - 1次,数组的长度不会大于n,并且   数组的最后一个条目将包含除最后一个匹配之外的所有输入   分隔符。 如果n为非正,则该模式将应用为   尽可能多次,阵列可以有任何长度。 如果n为零   那么模式将尽可能多地应用于数组   可以有任何长度,尾随空字符串将被丢弃

您可以看到拆分代码:

public String[] split(String regex) {
    return split(regex, 0);
}

删除lqst空值是正常的,限制为0。

如果传递-1,则将获取每个空值。在空单元格上没有正确的调整。

String a = "R|1|^^^fieldname1|18.8H|||||||||";
String[] b = a.split("\\|", -1);
System.out.println(b.length);

输出

 13

答案 1 :(得分:0)

如果您阅读split的文档,则说:

  

此方法的工作方式就像调用双参数一样   具有给定表达式且limit参数为零的{@link#split(String, int) split}方法。因此,尾随空字符串不是   包含在结果数组中。

由于您在上一个String之间有空|,因此结果中不包括这些内容。

如果您尝试这样做:

String a = "R|1|^^^fieldname1|18.8H | | | | | | | | |";

String[] b = a.split("\\|");

System.out.println(Arrays.deepToString(b));

结果将是:

[R, 1, ^^^fieldname1, 18.8H ,  ,  ,  ,  ,  ,  ,  ,  ]

希望这有帮助。