Groovy - ¿Cómo comparar la cuerda?

83

cómo comparar la cadena que se pasa como parámetro

el siguiente método no funciona.

 String str = "saveMe"

 compareString(str)

 def compareString(String str){
    def str2 = "saveMe"
    if(str2==${str}){
      println "same"
    }else{
      println "not same"
    }
 }    

también probé

 String str = "India"

 compareString(str)

 def compareString(String str){
   def str2 = "india"
   if( str2 == str ) {
     println "same"
   }else{
     println "not same"
   }
 }    
usuario1602802
fuente
20
Indiano es lo mismo que india. El primer carácter es diferente
tim_yates

Respuestas:

87

Esta línea:

if(str2==${str}){

Debiera ser:

if( str2 == str ) {

El ${y }le dará un error de análisis, ya que solo deben usarse dentro de Groovy Strings para crear plantillas

tim_yates
fuente
@ user1602802 Lo hace en la maravillosa consola. ¿Qué errores está recibiendo?
tim_yates
25
@ user1602802 ¿Está comparando Indiacon mayúsculas Iy indiaminúsculas icomo en la edición de su pregunta? India != india. Ellos son diferentes.
tim_yates
117

Esta debería ser una respuesta

str2.equals (str)

Si quieres ignorar el caso

str2.equalsIgnoreCase (str)

ojblass
fuente
17
Votar en contra porque la pregunta original no especificaba que debería ignorar la atención. Además, groovy admite al ==operador para la comparación de cadenas (en contraste con Java, donde ==hace la comparación de identidad, no la comparación de cadenas).
Brianmearns
Ajusté
1
¿Existe un alias corto para equalsIgnoreCase en Groovy?
Simon Logic
1
Creo que podrías crear una función contenedora llamada eIC o algo similar. Depende de cuánto te moleste.
ojblass
4
Advertencia. .equals()no se comporta igual en Groovy que en Java. Ejemplo aquí : desplácese hacia abajo hasta 'GString and String'. Básicamente, ambos elementos deben ser del mismo tipo de clase String. Dado que la clase String está implícita en la asignación, GString es una construcción del lenguaje Groovy y String es una definición en línea, algo como def foo = "foo"... "${foo}".equals("foo")regresará false.
ingyhere
6

Si no desea verificar en mayúsculas o minúsculas, puede usar el siguiente método.

String str = "India" 
compareString(str) 

def compareString(String str){ 
  def str2 = "india" 
  if( str2.toUpperCase() == str.toUpperCase() ) { 
    println "same" 
  }else{ 
    println "not same" 
  } 
}

Así que ahora, si cambia str a "iNdIa", seguirá funcionando, por lo que reducirá la posibilidad de cometer un error tipográfico.

Dieterg
fuente
42
str2.equalsIgnoreCase( str )es probablemente más fácil de leer :-)
tim_yates
1
@tim_yates no solo es más fácil de leer, también es más correcto. Las conversiones de casos como estas son propensas a errores de configuración regional (turco I, etc.).
Ohad Schneider
1

La forma más corta (imprimirá "no es el mismo" porque la comparación de cadenas distingue entre mayúsculas y minúsculas):

def compareString = {
   it == "india" ? "same" : "not same"
}    

compareString("India")
Simek
fuente
-3

En Groovy, null == nullobtiene un true. En tiempo de ejecución, no sabrá qué sucedió. En Java, ==se comparan dos referencias.

Esta es una causa de gran confusión en la programación básica, si es seguro usar equals. En tiempo de ejecución, null.equals dará una excepción. Tienes la oportunidad de saber qué salió mal.

Especialmente, obtiene dos valores de claves que no existen en los mapas, los ==hace iguales.

user4313287
fuente
-7

use la variable def, cuando quiera comparar cualquier String. Utilice el siguiente código para ese tipo de comparación.

def nombre de variable = nulo

La consulta SQL le da algo de retorno. Utilice la función con el tipo de retorno def.

def functionname (def variablename) {

devolver el nombre de la variable

}

if ("$ nombre de variable" == "verdadero") {

}

Deepanshu Jain
fuente