2

我的代码是:

String s = "1;;;; 23;;";
System.out.println(s.split(";").length);

并给出作为输出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" }

如果我打印我拥有的字符串:

1



 23

我不应该从中得到类似的1;;;; 23;;东西{"1", "", "", "", " 23", ""}吗?

4

3 回答 3

8

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

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

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

于 2012-12-27T15:12:59.520 回答
2

由于 limit = 0 不包括尾随空字符串。尝试

System.out.println(s.split(";", -1).length);

你会得到 7

于 2012-12-27T15:16:46.793 回答
0

它会在任何时候拆分字符串';' 呈现并放入数组。

于 2012-12-27T15:17:12.757 回答