jak porównać ciąg, który jest przekazywany jako parametr
Następująca metoda nie działa.
String str = "saveMe"
compareString(str)
def compareString(String str){
def str2 = "saveMe"
if(str2==${str}){
println "same"
}else{
println "not same"
}
}
też próbowałem
String str = "India"
compareString(str)
def compareString(String str){
def str2 = "india"
if( str2 == str ) {
println "same"
}else{
println "not same"
}
}
India
to nie to samo coindia
. Pierwsza postać jest innaOdpowiedzi:
Ta linia:
if(str2==${str}){
Powinien być:
if( str2 == str ) {
Polecenie
${
i}
spowoduje błąd analizy, ponieważ powinny być używane tylko w Groovy Strings do tworzenia szablonówźródło
India
z wielkąI
iindia
małą literą,i
jak w edycji twojego pytania?India != india
. Oni są różni.To powinna być odpowiedź
Jeśli chcesz zignorować wielkość liter
źródło
==
operatora do porównywania ciągów (w przeciwieństwie do Javy, gdzie==
porównuje się tożsamość, a nie porównywanie ciągów)..equals()
czy nie zachowują się tak samo w Groovy jak ma to miejsce w Javie. Przykład tutaj - przewiń w dół do „GString and String”. Zasadniczo oba elementy muszą być tego samego typu klasy String. Ponieważ klasa String jest niejawna w przypisaniu - GString jest konstrukcją języka Groovy, a String jest definicją wbudowaną, coś takiego jakdef foo = "foo"
..."${foo}".equals("foo")
zwrócifalse
.Jeśli nie chcesz sprawdzać wielkich lub małych liter, możesz użyć następującej metody.
String str = "India" compareString(str) def compareString(String str){ def str2 = "india" if( str2.toUpperCase() == str.toUpperCase() ) { println "same" }else{ println "not same" } }
Więc teraz, jeśli zmienisz str na „iNdIa”, to nadal będzie działać, więc zmniejszasz szansę, że popełnisz literówkę.
źródło
str2.equalsIgnoreCase( str )
jest prawdopodobnie łatwiejszy do odczytania :-)Najkrótszy sposób (wypisze „nie to samo”, ponieważ porównanie ciągów znaków uwzględnia wielkość liter):
def compareString = { it == "india" ? "same" : "not same" } compareString("India")
źródło
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 }
wynik:
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
źródło
W Groovy
null == null
dostajetrue
. W czasie wykonywania nie wiesz, co się stało. W Javie==
porównuje dwa odwołania.Jest to przyczyną dużego zamieszania w podstawowym programowaniu, czy używanie równa się jest bezpieczne. W czasie wykonywania a null.equals będzie stanowić wyjątek. Masz szansę dowiedzieć się, co poszło nie tak.
W szczególności otrzymujesz dwie wartości z kluczy, których nie ma w mapach, co
==
sprawia , że są równe.źródło
użyj zmiennej def, jeśli chcesz porównać dowolny łańcuch. Użyj poniższego kodu dla tego typu porównania.
def nazwa zmiennej = null
Zapytanie SQL daje zwrot. Użyj funkcji z typem powrotu def.
def functionname (def zmienna nazwa) {
nazwa zmiennej zwracanej
}
if ("$ nazwa zmiennej" == "prawda") {
}
źródło