【问题标题】:String#split method confusionString#split 方法混淆
【发布时间】:2014-03-27 08:27:50
【问题描述】:

我试过这段代码:

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

输出是:

0
6

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

谁能解释一下?

【问题讨论】:

  • 如果你想保留尾随空字符串,你可以使用str.split(",", -1)
  • 啊,我从来不知道split()方法可以有2参数!

标签: java string split


【解决方案1】:

因为在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了解更多详情

【讨论】:

    【解决方案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。

    希望能解释清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多