String#split方法混淆

时间:2014-03-27 08:27:50

标签: java string split

我试过这段代码:

String str =",,,,,";
String str2=",,,,, ";
System.out.println(str.split(",").length);
System.out.println(str2.split(",").length);

输出是:

0
6

唯一的区别是str值为,,,,,没有 空格),str2值为,,,,, 空间

任何人都可以解释一下吗?

2 个答案:

答案 0 :(得分:5)

因为在String#split()方法中,尾随空字符串不会包含在数组结果中。

String str =",,,,,";
String str2=",,,,, ";

由于str.split(",")会给你[, , , , ,],它会返回[],因为你有一个尾随空字符串

str2.split(",")不同,它会给你

[, , , , , ]
          ^ //note the whitespace element 

您可以尝试

System.out.println(",,,,, ,,,,".split(",").length);

这仍然会给你输出:6,这是[, , , , , ],因为在空格之后,你所拥有的只是尾随空字符串(因此不包含在数组中)结果)


注意:您可以通过指定限制来保留尾随空字符串:

System.out.println(str.split(",", -1).length);
                                   ^ limit

输出:6

查看String#split Documentation了解详情

答案 1 :(得分:2)

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.取自String documentation.

如果您的第二个字符串为",,, ,,",则长度为4。

希望能够清楚地解释清楚。