在java 1.6中String.split的行为?

die*_*rre 2 java split java-6

我的代码是:

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"会使用以下表达式产生以下结果:

Regex Result
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
Run Code Online (Sandbox Code Playgroud)

如果我打印我的字符串:

1



 23
Run Code Online (Sandbox Code Playgroud)

我不应该从这样的1;;;; 23;;东西中得到什么{"1", "", "", "", " 23", ""}

Fls*_*Zen 8

不,五是正确的,正如你引用的文档所述:

因此,结尾的空字符串不包含在结果数组中.

这就是为什么省略了数组末尾的空字符串的原因.如果你想要空字符串,请按照Evgeniy Dorofeev的回答说明并指定-1的限制.