我期待一个空列表,但我得到了:
assert 1 == "".split(/\s+/).size()
和
assert 0 == "".split().size()
答案 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']