以下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()方法行为中遗漏了一些东西,或者这是一个真正的错误?
我不熟悉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].