繁体   English   中英

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

[英]Why java is different from javascript when execute this split() function

在javascript中

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

但在java中:

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

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

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 java的String.spit灵活。 limit参数控制模式的应用次数,因此会影响结果数组的长度。 如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入。 如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度。 如果n为零,那么模式将被应用尽可能多的次数,该数组可以具有任何长度,并且将丢弃尾随的空字符串。 更多细节在这里

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

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

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

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

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

java文档

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

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

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

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

来自developer.mozilla.org的javascript文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM