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