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

net*_*tie 1 groovy

我不明白为什么我的简单String相等测试返回 false。

代码是:

boolean isDevelopment() {
        //config.project_stage is set to "Development"
        String cfgvar = "${config.project_stage}" 
        String comp = "Development"
        assert cfgvar.equals(comp)
    }
Run Code Online (Sandbox Code Playgroud)

结果是:

assert cfgvar.equals(comp)
       |      |      |
       |      false  Development
       Development 
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我也会出错:

assert cfgvar == comp
Run Code Online (Sandbox Code Playgroud)

Val*_*_Bo 5

toString()没有必要。很可能您config.project_stagecfgvar. 中有一些尾随空格,因此它们也保留在.

comp 没有多余的空格,可以从您的代码中看到什么。

最初表达式"${config.project_stage}"GString 类型的,但由于您将它分配给一个类型为 as 的变量String,它被强制转换为String,因此toString()不会改变任何内容。

使用equals(...)或取决于您==。实际上,Groovy 默默地将第二种形式转换为第一种形式。

所以,总而言之,你可以写assert cfgvar.trim() == comp.

你也可以cfgvar在一开始就修剪,写:

cfgvar = "${config.project_stage}".trim()
Run Code Online (Sandbox Code Playgroud)

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