String#split方法混淆

DnR*_*DnR 3 java string split

我试过这段代码:

String str =",,,,,";
String str2=",,,,, ";
System.out.println(str.split(",").length);
System.out.println(str2.split(",").length);
Run Code Online (Sandbox Code Playgroud)

输出是:

0
6
Run Code Online (Sandbox Code Playgroud)

唯一的区别是str价值是,,,,,(没有 空间)和str2价值是,,,,,( 空间)

有人可以解释一下吗?

Bab*_*aby 5

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

String str =",,,,,";
String str2=",,,,, ";
Run Code Online (Sandbox Code Playgroud)

正如str.split(",")本应该给你的那样[, , , , ,],它会返回[],因为你在那里有一个尾随的空字符串.

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

[, , , , , ]
          ^ //note the whitespace element 
Run Code Online (Sandbox Code Playgroud)

你可以试试

System.out.println(",,,,, ,,,,".split(",").length);
Run Code Online (Sandbox Code Playgroud)

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


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

System.out.println(str.split(",", -1).length);
                                   ^ limit
Run Code Online (Sandbox Code Playgroud)

输出:6

有关详细信息,请查看String#split文档