Groovy split()方法的bug?

时间:2010-10-11 18:06:43

标签: string groovy

以下Groovy代码段给我带来了奇怪的结果:

def s = "123456"
assert s.split("").size() == s.size()

结果:

Assertion failed: 

assert s.split("").size() == s.size()
       | |         |      |  | |
       | |         7      |  | 6
       | |                |  123456
       | |                false
       | [, 1, 2, 3, 4, 5, 6]
       123456

我是否在split()方法行为中遗漏了一些东西,或者这是一个真正的错误?

2 个答案:

答案 0 :(得分:5)

我不熟悉Groovy,但我会在这里发表意见,并猜测String.split()的工作方式与Java相同。这意味着您传递给split()的参数是一个表示正则表达式的String - 在本例中是空字符串。根据{{​​3}}:

  

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

这意味着您的通话split("")(例如“拆分空字符串”)相当于split("", 0)。每个(非空)字符串以开头,以空字符串结束。因此,您的split("")电话实际上是为您提供[, 1, 2, 3, 4, 5, 6, ]减去了空白字符串,因此[, 1, 2, 3, 4, 5, 6]

答案 1 :(得分:4)

为什么使用split()?使用toCharArray():

assert s.toCharArray().length == s.size()