我的代码是:
String s = "1;;;; 23;;"; System.out.println(s.split(";").length);
并给出输出5。的源代码split是:
5
split
public String[] split(String regex) { return split(regex, 0); }
并且文档说:
该方法的工作方式就像通过调用带有给定表达式且限制参数为零的两个参数split(java.lang.String,int)方法。因此,结尾的空字符串不包括在结果数组中。 例如,字符串“ boo:and:foo”通过这些表达式产生以下结果: Regex Result : { "boo", "and", "foo" } o { "b", "", ":and:f" }
该方法的工作方式就像通过调用带有给定表达式且限制参数为零的两个参数split(java.lang.String,int)方法。因此,结尾的空字符串不包括在结果数组中。
例如,字符串“ boo:and:foo”通过这些表达式产生以下结果:
Regex Result : { "boo", "and", "foo" } o { "b", "", ":and:f" }
如果我打印字符串,则有:
1 23
我不应该从这样的1;;;; 23;;东西中得到{"1", "", "", "", " 23", ""}吗?
1;;;; 23;;
{"1", "", "", "", " 23", ""}
不,有五个是正确的,如您引用的文档所述:
因此,结尾的空字符串不包括在结果数组中。
这就是为什么省略数组末尾的空字符串的原因。如果您想要空字符串,请按照Evgeniy Dorofeev的回答所述进行操作,并指定限制为-1。