如何确定字符串是不是为非空,而不仅仅是 Groovy 中的空格?

Posted

技术标签:

【中文标题】如何确定字符串是不是为非空,而不仅仅是 Groovy 中的空格?【英文标题】: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

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

【问题讨论】:

【参考方案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 方法。

以上是关于如何确定字符串是不是为非空,而不仅仅是 Groovy 中的空格?的主要内容,如果未能解决你的问题,请参考以下文章

oracle怎么校验字段是不是为非空约束

如何将空查询集指定为非空查询集:[] 到 [<object: hi>]

typescript 是不是能够理解数组是不是为非空并相应地推断某些数组方法的类型?

如何在swagger codegen中处理多种响应/返回类型(204为空,400为非空等)?

错误 #2007:参数文本必须为非空

mysql中可以在表格没有输入任何数据的情况下设置字段为非空吗?