Vergleichen der Zeichenfolge, die als Parameter übergeben wird
Die folgende Methode funktioniert nicht.
String str = "saveMe"
compareString(str)
def compareString(String str){
def str2 = "saveMe"
if(str2==${str}){
println "same"
}else{
println "not same"
}
}
auch versucht
String str = "India"
compareString(str)
def compareString(String str){
def str2 = "india"
if( str2 == str ) {
println "same"
}else{
println "not same"
}
}
India
ist nicht dasselbe wieindia
. Das erste Zeichen ist andersAntworten:
Diese Linie:
if(str2==${str}){
Sollte sein:
if( str2 == str ) {
Das
${
und}
gibt Ihnen einen Analysefehler, da sie nur in Groovy Strings für Vorlagen verwendet werden solltenquelle
India
mit einem GroßbuchstabenI
undindia
einem Kleinbuchstabeni
wie in der Bearbeitung?India != india
. Sie sind anders.Dies sollte eine Antwort sein
Wenn Sie den Fall ignorieren möchten
quelle
==
Operator für den Zeichenfolgenvergleich (im Gegensatz zu Java, wo==
der Identitätsvergleich und nicht der Zeichenfolgenvergleich durchgeführt wird)..equals()
tut nicht das gleiche in Groovy verhalten , wie es in Java tut. Beispiel hier - scrollen Sie nach unten zu 'GString and String'. Grundsätzlich müssen beide Elemente vom gleichen Typ einer String-Klasse sein. Da die String-Klasse in der Zuweisung impliziert ist - GString ist ein Groovy-Sprachkonstrukt und String eine Inline-Definition, wird so etwas wiedef foo = "foo"
..."${foo}".equals("foo")
zurückgegebenfalse
.Wenn Sie keine Groß- oder Kleinschreibung überprüfen möchten, können Sie die folgende Methode verwenden.
String str = "India" compareString(str) def compareString(String str){ def str2 = "india" if( str2.toUpperCase() == str.toUpperCase() ) { println "same" }else{ println "not same" } }
Wenn Sie also str in "iNdIa" ändern, funktioniert es immer noch, sodass Sie die Wahrscheinlichkeit verringern, dass Sie einen Tippfehler machen.
quelle
str2.equalsIgnoreCase( str )
ist wahrscheinlich leichter zu lesen :-)Der kürzeste Weg (wird "nicht gleich" gedruckt, da beim String-Vergleich zwischen Groß- und Kleinschreibung unterschieden wird):
def compareString = { it == "india" ? "same" : "not same" } compareString("India")
quelle
String str = "saveMe" compareString(str) def compareString(String str){ def str2 = "saveMe" // using single quotes println 'single quote string class' + 'String.class'.class println str + ' == ' + str2 + " ? " + (str == str2) println ' str = ' + '$str' // interpolation not supported // using double quotes, Interpolation supported println "double quoted string with interpolation " + "GString.class $str".class println "double quoted string without interpolation " + "String.class".class println "$str equals $str2 ? " + str.equals(str2) println '$str == $str2 ? ' + "$str==$str2" println '${str == str2} ? ' + "${str==str2} ? " println '$str equalsIgnoreCase $str2 ? ' + str.equalsIgnoreCase(str2) println ''' triple single quoted Multi-line string, Interpolation not supported $str ${str2} Groovy has also an operator === that can be used for objects equality === is equivalent to o1.is(o2) ''' println ''' triple quoted string ''' println 'triple single quoted string ' + '''' string '''.class println """ triple double quoted Multi-line string, Interpolation is supported $str == ${str2} just like double quoted strings with the addition that they are multiline '\${str == str2} ? ' ${str == str2} """ println 'triple double quoted string ' + """ string """.class }
Ausgabe:
single quote string classclass java.lang.String saveMe == saveMe ? true str = $str double quoted string with interpolation class org.codehaus.groovy.runtime.GStringImpl double quoted string without interpolation class java.lang.String saveMe equals saveMe ? true $str == $str2 ? saveMe==saveMe ${str == str2} ? true ? $str equalsIgnoreCase $str2 ? true triple single quoted Multi-line string, Interpolation not supported $str ${str2} Groovy has also an operator === that can be used for objects equality === is equivalent to o1.is(o2) triple quoted string triple single quoted string class java.lang.String triple double quoted Multi-line string, Interpolation is supported saveMe == saveMe just like double quoted strings with the addition that they are multiline '${str == str2} ? ' true triple double quoted string class java.lang.String
quelle
In Groovy
null == null
bekommt eintrue
. Zur Laufzeit wissen Sie nicht, was passiert ist. In Java==
zwei Referenzen verglichen.Dies ist eine Ursache für große Verwirrung in der Grundprogrammierung, ob es sicher ist, gleich zu verwenden. Zur Laufzeit gibt null.equals eine Ausnahme aus. Sie haben die Möglichkeit zu wissen, was schief gelaufen ist.
Insbesondere erhalten Sie zwei Werte von Schlüsseln, die in Map (s) nicht vorhanden sind,
==
wodurch sie gleich sind.quelle
Verwenden Sie die Variable def, wenn Sie einen String vergleichen möchten. Verwenden Sie den folgenden Code für diese Art von Vergleich.
def Variablenname = null
SQL-Abfrage geben Ihnen eine gewisse Rendite. Verwenden Sie die Funktion mit dem Rückgabetyp def.
def Funktionsname (def Variablenname) {
Variablenname zurückgeben
}}
if ("$ variable name" == "true") {
}}
quelle