как сравнить строку, переданную в качестве параметра
следующий метод не работает.
String str = "saveMe"
compareString(str)
def compareString(String str){
def str2 = "saveMe"
if(str2==${str}){
println "same"
}else{
println "not same"
}
}
также пробовал
String str = "India"
compareString(str)
def compareString(String str){
def str2 = "india"
if( str2 == str ) {
println "same"
}else{
println "not same"
}
}
India
не то же самое, чтоindia
. Первый персонаж другойОтветы:
Эта строка:
if(str2==${str}){
Должно быть:
if( str2 == str ) {
${
И}
даст вам ошибку синтаксического анализа, так как они должны быть использованы только в Groovy Струны для шаблонамисточник
India
с заглавнойI
иindia
строчной буквами,i
как в редактировании вашего вопроса?India != india
. Они разные.Это должен быть ответ
Если вы хотите игнорировать регистр
источник
==
оператор для сравнения строк (в отличие от Java, где==
выполняется сравнение идентичности, а не сравнение строк)..equals()
вовсе не ведут себя так же в Groovy , как это делается в Java. Пример здесь - прокрутите вниз до «GString and String». По сути, оба элемента должны быть одного типа класса String. Так как класс строк подразумевается в задании - GString конструкция языка Groovy и строка является определение рядный, что - то вродеdef foo = "foo"
..."${foo}".equals("foo")
вернетсяfalse
.Если вы не хотите проверять верхний или нижний регистр, вы можете использовать следующий метод.
String str = "India" compareString(str) def compareString(String str){ def str2 = "india" if( str2.toUpperCase() == str.toUpperCase() ) { println "same" }else{ println "not same" } }
Так что теперь, если вы измените str на «iNdIa», он по-прежнему будет работать, поэтому вы уменьшите вероятность того, что сделаете опечатку.
источник
str2.equalsIgnoreCase( str )
наверное легче читать :-)Самый короткий способ (напечатает «не то же самое», потому что сравнение строк чувствительно к регистру):
def compareString = { it == "india" ? "same" : "not same" } compareString("India")
источник
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 }
вывод:
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
источник
В Groovy
null == null
получает файлtrue
. Во время выполнения вы не узнаете, что произошло. В Java==
сравниваются две ссылки.Это причина большой путаницы в базовом программировании, безопасно ли использовать equals. Во время выполнения null.equals выдаст исключение. У вас есть шанс узнать, что пошло не так.
В частности, вы получаете два значения из ключей, которых нет на карте (ах), что
==
делает их равными.источник
используйте переменную def, когда вы хотите сравнить любую строку. Используйте приведенный ниже код для этого типа сравнения.
def имя переменной = null
SQL-запрос даст вам некоторую отдачу. Используйте функцию с возвращаемым типом def.
def functionname (def имя переменной) {
вернуть имя переменной
}
if ("$ имя переменной" == "истина") {
}
источник