【问题标题】:How can I determine if a String is non-null and not only whitespace in Groovy?如何确定字符串是否为非空,而不仅仅是 Groovy 中的空格?
【发布时间】:2012-02-28 10:10:50
【问题描述】:

Groovy 将 isAllWhitespace() 方法添加到 Strings,这很好,但似乎没有一种 的方法来确定 String 是否有其他东西 just em> 里面有空格。

我能想到的最好的是:

myString && !myString.allWhitespace

但这似乎太冗长了。这对于验证来说似乎很常见,必须有一种更简单的方法来确定这一点。

【问题讨论】:

    标签: string groovy whitespace


    【解决方案1】:

    另一种选择是

    if (myString?.trim()) {
      ...
    }
    

    (使用Groovy Truth for Strings

    【讨论】:

    • myString?.trim() 返回一个字符串(或 null 或空白),而不是返回布尔值的问题。我想这取决于你如何使用输出,只是一个“如果”就可以了。
    • boolean containsData = myString?.trim()
    • @Steven,Groovy 的真相是 null 或空字符串是错误的,所以如果你需要它在一个不会使它成为布尔值。例如,def myVal = (myString?.trim())
    • @cdeszaq 如果你使用def myVal = (myString?.trim()) 那么myVal 要么是String 要么是null,用大括号括起来不会将其更改为布尔值。但是,如果您将其分配给布尔变量或使用 (myString?.trim()) as boolean 或(如我的回答)在 if 语句中使用它,那么正如您所说,它将使用字符串的 Groovy Truth 值(或 null)
    • ​if ("false") println "that's true too"
    【解决方案2】:

    您可以向 String 添加一个方法以使其更具语义:

    String.metaClass.getNotBlank = { !delegate.allWhitespace }
    

    你可以这样做:

    groovy:000> foo = ''
    ===> 
    groovy:000> foo.notBlank
    ===> false
    groovy:000> foo = 'foo'
    ===> foo
    groovy:000> foo.notBlank
    ===> true
    

    【讨论】:

    • 修改元类的最佳位置在哪里?
    • 如果 foo = null 怎么办?
    • @Bertl 这将是一个空指针异常。但如果 foo 为 null,则它没有类,也没有 metaClass 方法。
    猜你喜欢
    • 2011-01-03
    • 2012-05-18
    • 1970-01-01
    • 2014-08-03
    • 2011-02-24
    • 1970-01-01
    • 2020-09-14
    • 2011-01-25
    相关资源
    最近更新 更多