Groovy为字符串添加了isAllWhitespace()
方法,这很不错,但似乎没有一个好的方法来确定一个字符串中除了空格之外是否还有其他内容。
我能想到的最好的方法是:
myString && !myString.allWhitespace
但这看起来太啰嗦了。验证似乎是一种常见的事情,必须有更简单的方法来确定这一点。
Groovy为字符串添加了isAllWhitespace()
方法,这很不错,但似乎没有一个好的方法来确定一个字符串中除了空格之外是否还有其他内容。
我能想到的最好的方法是:
myString && !myString.allWhitespace
但这看起来太啰嗦了。验证似乎是一种常见的事情,必须有更简单的方法来确定这一点。
String.metaClass.getNotBlank = { !delegate.allWhitespace }
它让你可以执行以下操作:
groovy:000> foo = ''
===>
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
它在我的grails2.1项目中有效:
String str = someObj.getSomeStr()?.trim() ?: "Default value"
static boolean isNullOrEmpty(String str) { return (str == null || str.allWhitespace) }
// Then I often use it in this manner
DEF_LOG_PATH = '/my/default/path'
logPath = isNullOrEmpty(log_path) ? DEF_LOG_PATH : log_path
我对使用Groovy还比较新,不过我不确定是否存在一种将其作为String类型的实际扩展方法的方式,而且这种方法已经足够好用,所以我没有费心去寻找。
谢谢, -MH
boolean containsData = myString?.trim()
: 该行代码是一个Java的空值安全操作符,用于判断字符串变量myString
是否为空。如果myString
不为空,则调用trim()
方法去掉字符串两端的空格并将结果赋给布尔类型变量containsData
。如果myString
为空,则containsData
变量将被赋予空值。 - tim_yates()
将其括起来即可。例如,def myVal = (myString?.trim())
。 - cdeszaqdef myVal = (myString?.trim())
,那么myVal
的值要么是一个字符串 (String
),要么是null
。用括号包裹它并不会将其转换成布尔值。但是,如果你将它赋值给一个布尔变量,或者使用(myString?.trim()) as boolean
,或者(如我的回答中所示)在if
语句中使用它,那么就会使用该字符串(或 null)的 Groovy 真值。 - tim_yates