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

时间:2017-04-28 12:37:30

标签: groovy

我无法理解为什么我的简单var list = new List<TempFieldList>(); foreach (DataRow row in ListTable.Rows) { list.Add(new TempFieldList{ field1 = row["Field1"].ToString(), field2 = row["Field2"].ToString() }); } foreach (DataRow row in ListTable.Rows) { var result = list.FirstOrDefault(x => x.field2 == row["Field1"].ToString()); //row.Dump(); if(result != null ) ResultTable.Rows.Add(""); else ResultTable.Rows.Add(row["Field1"].ToString(), null); } 相等测试返回false。

代码是:

String

结果是:

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 

3 个答案:

答案 0 :(得分:4)

toString()没有必要。最有可能你有一些尾随 config.project_stage中的空格,因此它们也会保留在cfgvar

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

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

由您决定是使用equals(...)还是==。 实际上,Groovy默默地将第二种形式翻译成第一种形式。

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

你也可以在开头修剪cfgvar,写下:

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

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

答案 1 :(得分:2)

你检查过尾随空格吗?至少你的输出是第一个Development的输出。比较这些字符串时尝试.trim()(也可能是.toLowerCase())

请记住:Groovy中的.equals()是一个指针比较。想要做的是==。是的,与Java中定义的相反,但Groovy定义更有意义: - )

更新:查看@tim_yates的评论 - 我将.equals().is()混合

答案 2 :(得分:1)

您所比较的对象不是String而是GString,请尝试:

cfgvar.toString().equals(comp)

但是你的代码适用于groovy v.2.4.5。你使用的是哪个版本?