我正在使用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
我找不到背后的原因请告诉我我错过了什么。
答案 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 , , , , , , , , ]
希望这有帮助。