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
我的代码是:
String s = "1;;;; 23;;";
System.out.println(s.split(";").length);
Run Code Online (Sandbox Code Playgroud)
并作为输出5.源代码split是:
public String[] split(String regex) {
return split(regex, 0);
}
Run Code Online (Sandbox Code Playgroud)
并且文件说:
此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split(java.lang.String,int)方法一样.因此,结尾的空字符串不包含在结果数组中.
例如,字符串"boo:and:foo"会使用以下表达式产生以下结果:
Run Code Online (Sandbox Code Playgroud)Regex Result : { "boo", "and", "foo" } o { "b", "", ":and:f" }
如果我打印我的字符串:
1
23
Run Code Online (Sandbox Code Playgroud)
我不应该从这样的1;;;; 23;;东西中得到什么{"1", "", "", "", " 23", ""}?
如果你的问题是我java.lang.ArrayIndexOutOfBoundsException在我的代码中得到了一个,我不明白为什么会发生这种情况.它是什么意思,我该如何避免它?
这是关于这个主题的最全面的Canonical信息集合
java.lang.ArrayIndexOutOfBoundsException以及java.lang.IndexOutOfBoundsException.
有很多像这样的问题,所有这些都有模糊的没有代码答案,或者大多数都非常具体,并且局限于手头的问题,并没有解决在所有情况下完全相同的根本原因.
如果您看到属于此一般情况的一个,而不是使用更多重复的专门内容回答它,请将其标记为此副本的副本.