如何判断String是否为非null,而不仅仅是Groovy中的空格?

cde*_*zaq 111 string groovy whitespace

Groovy的添加isAllWhitespace()方法为字符串,这是伟大的,但似乎不是一个办法确定如果字符串比其他的东西只是在它的空白.

我能想到的最好的是:

myString && !myString.allWhitespace
Run Code Online (Sandbox Code Playgroud)

但这似乎太冗长了.这似乎是验证的常见问题,必须有一种更简单的方法来确定这一点.

tim*_*tes 213

另一种选择是

if (myString?.trim()) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • @cdeszaq如果你做`def myVal =(myString?.trim())`那么`myVal`要么是`String`要么是`null`,把它包在大括号中不会把它改成布尔值.但是,如果你将它分配给一个布尔变量或者使用`(myString?.trim())作为boolean`或(在我的回答中)在`if`语句中使用它,那么正如你所说它将使用Groovy真相字符串的值(或null) (11认同)
  • 或者`boolean containsData = myString?.trim()` (9认同)
  • `​if ("false") println "这也是真的"` (5认同)
  • @Steven,Groovy真理说null或空字符串是假的,所以你可以将它包装在`()`中,如果你需要它在一个不会使它成为布尔值的语句中.例如,`def myVal =(myString?.trim())` (4认同)
  • myString?.trim()返回一个字符串(或null或空白),而不是问题的布尔值。我想这取决于您如何使用输出,对于一个“如果”就可以了。 (2认同)
  • @MichielHaisma 添加了文档链接 (2认同)

doe*_*eri 8

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

String.metaClass.getNotBlank = { !delegate.allWhitespace }
Run Code Online (Sandbox Code Playgroud)

让你做的:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
Run Code Online (Sandbox Code Playgroud)

  • metaClass修改的最佳位置在哪里? (3认同)

小智 5

它在我的项目中与 grails2.1 一起工作:

String str = someObj.getSomeStr()?.trim() ?: "Default value"
Run Code Online (Sandbox Code Playgroud)

如果 someObj.getSomeStr() 为 null 或空 "" -> str = "默认值"
如果 someObj.getSomeStr() = "someValue" -> str = "someValue"