如何在groovy脚本中比较字符串

如何在groovy脚本中比较字符串,groovy,Groovy,我无法理解为什么我的简单字符串相等性测试返回false 代码是: boolean isDevelopment() { //config.project_stage is set to "Development" String cfgvar = "${config.project_stage}" String comp = "Development" assert cfgvar.equals(comp) } 结果是: as

我无法理解为什么我的简单
字符串
相等性测试返回false

代码是:

boolean isDevelopment() {
        //config.project_stage is set to "Development"
        String cfgvar = "${config.project_stage}" 
        String comp = "Development"
        assert cfgvar.equals(comp)
    }
结果是:

assert cfgvar.equals(comp)
       |      |      |
       |      false  Development
       Development 
如果我这样做,我也会出错:

assert cfgvar == comp

在比较的对象中,有一个不是
字符串,而是
GString
,请尝试:

cfgvar.toString().equals(comp)

但是,您的代码可以使用groovy v。2.4.5. 您使用的是哪个版本?

在您比较的对象中,有一个不是
字符串,而是
GString
,请尝试:

cfgvar.toString().equals(comp)

但是,您的代码可以使用groovy v。2.4.5. 您使用的是哪个版本?

是否检查了尾随空格?对于第一次
开发
,至少要将您的输出作为一个输出。比较这些字符串时,请尝试使用.trim()(也可以使用.toLowerCase())

记住:
.equals()
在Groovy中是指针比较。我们要做的是
==
。是的,与Java中的定义正好相反,但Groovy的定义更有意义:-)


更新:请参阅@tim_yates-I mixed
.equals()
的评论,其中包含
.is()
是否检查了尾随空格?对于第一次
开发
,至少要将您的输出作为一个输出。比较这些字符串时,请尝试使用.trim()(也可以使用.toLowerCase())

记住:
.equals()
在Groovy中是指针比较。我们要做的是
==
。是的,与Java中的定义正好相反,但Groovy的定义更有意义:-)

更新:见@tim_yates的评论-我混合了
.equals()
.is()
toString()
是不必要的。很可能你有一些拖尾
config.project\u stage
中的空格,因此它们也保留在
cfgvar

comp
没有额外的空格,从代码中可以看到什么

最初表达式
“${config.project\u stage}”
GString
类型,但由于将其分配给类型为
字符串的变量,
它被强制为
String
,因此
toString()
不会更改任何内容

这取决于您是使用
等于(…)
还是
=
。 实际上,Groovy默默地将第二种形式转换为第一种形式

总之,您可以编写
断言cfgvar.trim()==comp

您还可以在开始时修剪
cfgvar
,写下:

cfgvar = "${config.project_stage}".trim()
然后不用担心任何尾随空格。

toString()
不是必需的。很可能你有一些拖尾
config.project\u stage
中的空格,因此它们也保留在
cfgvar

comp
没有额外的空格,从代码中可以看到什么

最初表达式
“${config.project\u stage}”
GString
类型,但由于将其分配给类型为
字符串的变量,
它被强制为
String
,因此
toString()
不会更改任何内容

这取决于您是使用
等于(…)
还是
=
。 实际上,Groovy默默地将第二种形式转换为第一种形式

总之,您可以编写
断言cfgvar.trim()==comp

您还可以在开始时修剪
cfgvar
,写下:

cfgvar = "${config.project_stage}".trim()

然后不用担心任何尾随空格。

我使用的是2.4.5版。但是cfgvar.toString().equals(comp)也返回false。好吧,它不是一个GString,只是一个变量替换。GString应该是
“${->something}”
,不是吗?@rdmueller不会。我使用的是2.4.5版。但是cfgvar.toString().equals(comp)也返回false。好吧,它不是一个GString,只是一个变量替换。GString应该是
“${->something}”
,不是吗?@rdmueller不会。
equals
在Groovy中不是指针比较。。。这一个确实有效,rtn=cfgvar.toString().trim()==comp。我太高兴了!!!谢谢你,穆勒:-)。它在语法上可能并不完美,但在用它挣扎了2个小时后,我不在乎。我有一个最后期限。再次感谢您的快速帮助
equals
在Groovy中不是指针比较。。。这一个确实有效,rtn=cfgvar.toString().trim()==comp。我太高兴了!!!谢谢你,穆勒:-)。它在语法上可能并不完美,但在用它挣扎了2个小时后,我不在乎。我有一个最后期限。再次感谢您的快速帮助!!!很好的总结。谢谢你,瓦尔迪!很好的总结。谢谢你,瓦尔迪!