Java String拆分无法正常工作

kde*_*dev 2 java split

Java专家,

请查看下面的拆分命令代码,让我知道为什么不捕获最后两个空值.

String test = "1,O1,,,,0.0000,0.0000,,";
String[] splittest = test.split(",");
System.out.println("length -"+splittest.length);
for (String string : splittest) {
    System.out.println("value"+string);
}
Run Code Online (Sandbox Code Playgroud)

结果我得到了

length -7
value1
valueO1
value
value
value
value0.0000
value0.0000
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,长度为7,因为它应该是9,也可以看到0.0000之后的值,即两个最后的空值不会到来.让我们说现在,如果我改变字符串测试"1,O1 ,,,, 0.0000,0.0000,0,0"

String test = "1,O1,,,,0.0000,0.0000,0,0";
String[] splittest = test.split(",");
System.out.println("length -"+splittest.length);
for (String string : splittest) {
    System.out.println("value"+string);
}
Run Code Online (Sandbox Code Playgroud)

我说得对

length -9
value1
valueO1
value
value
value
value0.0000
value0.0000
value0
value0
Run Code Online (Sandbox Code Playgroud)

我不认为我做错了.这是一个错误吗?JAVA版本 - jdk1.6.0_31

ass*_*ias 17

它的行为与javadoc中指定的相同:

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样.因此,结尾的空字符串不包含在结果数组中.

如果要保留尾随空白字符串,可以使用带有负限制的2参数split方法:

String[] splittest = test.split(",", -1);
Run Code Online (Sandbox Code Playgroud)

如果限制是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度.


Lou*_*man 7

split 静默地丢弃跟踪分隔符,如Javadoc中所指定的那样.

在一般情况下,行为split是种奇怪的.考虑使用Guava Splitter代替,它具有更可预测和可定制的行为.(披露:我向番石榴捐款.)

Splitter.on(',').split("1,O1,,,,0.0000,0.0000,,");
// returns [1, O1, , , , 0.0000, 0.0000, , ]
Splitter.on(',').omitEmptyStrings()
  .split("1,O1,,,,0.0000,0.0000,,");
// returns [1, O1, 0.0000, 0.0000]
Run Code Online (Sandbox Code Playgroud)