【问题标题】:Groovy: Why does split()ing an empty string by space return a list of one empty string?Groovy:为什么按空格分割()一个空字符串会返回一个空字符串的列表?
【发布时间】:2014-12-30 06:04:21
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为这是一个错误。我会询问团队中的其他人的意见。
  • 我认为 Java 做同样的事情。
  • @JeffScottBrown 我刚刚发现这是标准行为。结帐stackoverflow.com/questions/16645083/…
  • 我认为人们可能会争论这是否是一个错误。情况并非总是如此,但对于这种特殊情况,我认为与 Java 保持一致可能比改变这一点更有意义。
  • @JeffScottBrown 没错!这种行为似乎有充分的理由。

标签: java python regex string groovy


【解决方案1】:

也许您应该改用tokenize()

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

【讨论】:

    【解决方案2】:

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

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

    票数最高的答案说明:

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

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

    相比之下,第二种模式(带有\n 之类的参数)将生成第一个空字段。考虑一下如果你写了'\n'.split('\n'),你会得到两个字段(一个拆分,给你两半)。

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2017-11-10
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2012-03-19
      相关资源
      最近更新 更多