Java字符串拆分不起作用

Java字符串拆分不起作用,java,split,Java,Split,Java专家 请查看下面的split命令代码,让我知道为什么最后两个null没有被捕获 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); } 我

Java专家

请查看下面的split命令代码,让我知道为什么最后两个null没有被捕获

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);
}
我得到的结果

length -7
value1
valueO1
value
value
value
value0.0000
value0.0000
令人惊讶的是,长度是7,应该是9,也可以看到0.0000之后的值,即最后两个空值没有出现。现在假设我更改了字符串测试 “1,O1,,,,0.0000,0.0000,0,0”

我说得对

length -9
value1
valueO1
value
value
value
value0.0000
value0.0000
value0
value0

我不认为我做错了。是虫子吗JAVA版本-jdk1.6.0_31

其行为如中所述:

该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法因此,结果数组中不包括尾随的空字符串。

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

String[] splittest = test.split(",", -1);
如果限制为非正,则阵列将被应用尽可能多的次数,并且阵列可以具有任意长度


split
按照Javadoc中的指定,以静默方式丢弃尾部分隔符

一般来说,
split
的行为有点奇怪。考虑使用替代,它有一些更可预测和可定制的行为。(披露:我为番石榴捐款。)


如上所述,
test.split(“,”)将忽略尾随的空白字符串。可以将双参数方法与较大的第二个参数一起使用。然而,API也指出

If n is non-positive then the pattern will be applied as many times
as possible and the array can have any length.
其中n是第二个参数。如果你想要所有的尾随字符串,我建议


test.split(“,”,-1)

您使用split似乎很好……我不认为这是一个bug。请不要误解我,您要求澄清为什么程序会以这种方式运行是没有问题的,但您假设代码没有问题是有点错误的。事实上,你是对的,而Java编码工程师是错的,这样的机会非常小,以至于在很久以后才会进入对话。非常感谢。这有帮助。
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]
If n is non-positive then the pattern will be applied as many times
as possible and the array can have any length.