执行此split()函数时为什么java与javascript不同

时间:2016-12-13 06:29:16

标签: javascript java

在javascript中

",,".split(",").length   // Return 3

但是在java:

",,".split(",").length   // Return 0

为什么java在使用charater拆分字符串时会忽略其间的所有空字符串?

2 个答案:

答案 0 :(得分:3)

Java有两个重载函数String.split(..)

 1. public String[] split(String regex, int limit){}
 2. public String[] split(String regex) . This equals with split(String regex, int limit = 0)

使用limit参数make String.spit java flexible。 limit参数控制应用模式的次数,因此会影响结果数组的长度。如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含除最后一个匹配分隔符之外的所有输入。如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度。如果n为零,那么模式将被应用尽可能多的次数,数组可以具有任何长度,并且尾随空字符串将被丢弃。更多细节global scope

所以在你的情况下使用java:

",,".split(",").length   // Return 0
",,".split(",", -1).length   // Return 3

答案 1 :(得分:0)

要知道为什么存在差异,您首先必须了解split(String regex, int limit)

limit参数控制模式的应用次数,因此会影响结果数组的长度。他们特意说

  

如果n为零,则模式将被应用尽可能多次,数组可以具有任何长度,并且将丢弃尾随空字符串。

java docs

现在在split(String regex)。这个重载函数应该给出与上面相同的结果,其limit参数为零。

  

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样。因此,结尾的空字符串不包含在结果数组中。

另一方面,当我们谈论javascript时。我们知道它不会有任何超载。他们只做了一个功能,并有可选参数。如果您提供limit参数,它将限制要找到的拆分数。

  

整数,指定要查找的拆分数限制。 split()方法仍会在分隔符的每个匹配上拆分,直到拆分项的数量与限制匹配或字符串不足于分隔符。

javascript docs from developer.mozilla.org