Groovy split()方法的bug?

Phi*_*ppe 0 string groovy

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

def s = "123456"
assert s.split("").size() == s.size()
Run Code Online (Sandbox Code Playgroud)

结果是 :

Assertion failed: 

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

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

Mat*_*all 5

我不熟悉Groovy,但我会在这里走出困境,并猜测它的String.split()工作原理与Java相同.这意味着您传递给的参数split()是一个表示正则表达式的String - 在本例中为空字符串.根据Java文档:

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

这意味着您的呼叫split("")(例如"拆分空字符串")相当于split("", 0).每个(非空)字符串以空字符串开头结尾.所以,你的split("")电话实际上是给你的[, 1, 2, 3, 4, 5, 6, ],而不是尾随的空字符串,因此,[, 1, 2, 3, 4, 5, 6].