Groovy:为什么用空格分割()空字符串会返回一个空字符串的列表?

时间:2014-11-03 14:50:45

标签: java python regex string groovy

我期待一个空列表,但我得到了:

assert 1 == "".split(/\s+/).size()

assert 0 == "".split().size()

2 个答案:

答案 0 :(得分:1)

我刚刚发现Java和Python的String.split()也遵循这种模式。结帐http://docs.python.org/2/library/stdtypes.html#str.split

问题When splitting an empty string in Python, why does split() return an empty list while split('\n') returns ['']?包含的问题也必须阅读答案。

最高投票的答案解释说:

  

str.split()方法有两种算法。如果没有给出参数,它会在重复的空格运行时分裂。但是,如果给出了参数,则将其视为单个分隔符,不会重复运行。

     

在拆分空字符串的情况下,第一个模式(无参数)将返回一个空列表,因为吃了空格并且没有值放在结果列表中。

     

相反,第二种模式(带有\n等参数)将产生第一个空字段。考虑一下你是否写过'\n'.split('\n'),你会得到两个字段(一个分割,给你两半)。

答案 1 :(得分:0)

也许您应该使用tokenize()代替?

assert "".tokenize().size() == 0
assert "foo bar".tokenize() == ['foo', 'bar']