Groovy比较两个字符串

时间:2016-02-10 21:50:20

标签: groovy

为什么这两个字符串都不匹配:.equals()或.compareTo()OR == OR Objects.equals()?我相信它应该至少匹配一个比较。

 Process proc1 = 'cat /home/output.txt'.execute()
 Process proc2 = 'grep -o -m 1 webServiceReturn'.execute()

 Process all = proc1 | proc2

   def log =  all.text.toString()
   String svc = "webServiceReturn";

   println (log)
   println (svc)

      //if (svc.equals(log)) {
      //if (svc.compareTo(log)) {
      //if(svc == log) {
      if (Objects.equals((svc),(log))) {
               println "MATCHED" }
      else {
               println "NOT MATCHED" }

所有四项比较的结果是:

webServiceReturn
webServiceReturn
NOT MATCHED

2 个答案:

答案 0 :(得分:1)

我能够重现您的问题并进行一次小修改以修剪结果上的空白区域,使其匹配。

对你的all.text进行修剪以删除任何无关的空格。

def log =  all.text.trim()

您也不需要.toString()调用。

答案 1 :(得分:0)

我刚从另一个StackOverflow回答中了解到,使用equals().containsin无法看到不同类型字符串的相同内容。

Groovy different results on using equals() and == on a GStringImpl

根据@dunes在上述问题中的回答,使用==的Groovy比较在compareTo()之前机会性地使用equals()。 (Groovy中的==比较与Java比较参考文献有显着差异。

def expandedString = "${'test'}"
def simpleString = 'test'
println "Expansion: ${expandedString}"
println "equals 'test' ? ${expandedString.equals(simpleString)}"
println "    == 'test' ? ${expandedString == simpleString}"

以上输出如下,

Expansion: test
equals 'test' ? false
    == 'test' ? true

Groovy文档的以下摘录省略了使compareTo()==不同的equals()段。

  

在Groovy中,使用==来测试相等性与在Java中使用相同的运算符不同。在Groovy中,它调用equals。如果要比较引用相等性,则应使用is,如以下示例所示:

     
    

def list1 = [' Groovy 1.8'' Groovy 2.0'' Groovy 2.3']

         

def list2 = [' Groovy 1.8',' Groovy 2.0',' Groovy 2.3']

         

断言list1 == list2

         

断言!list1.is(list2)

  

http://docs.groovy-lang.org/next/html/documentation/core-operators.html#_identity_operator