为什么这两个字符串都不匹配:.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
答案 0 :(得分:1)
我能够重现您的问题并进行一次小修改以修剪结果上的空白区域,使其匹配。
对你的all.text进行修剪以删除任何无关的空格。
def log = all.text.trim()
您也不需要.toString()调用。
答案 1 :(得分:0)
我刚从另一个StackOverflow回答中了解到,使用equals()
,.contains
和in
无法看到不同类型字符串的相同内容。
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