¿Cómo puedo determinar si una cadena no es nula y no solo un espacio en blanco en Groovy?

128

Groovy agrega el isAllWhitespace()método a Strings, lo cual es genial, pero no parece haber una buena manera de determinar si un String tiene algo más que un espacio en blanco.

Lo mejor que he podido encontrar es:

myString && !myString.allWhitespace

Pero eso parece demasiado detallado. Esto parece algo tan común para la validación que debe haber una forma más simple de determinar esto.

cdeszaq
fuente

Respuestas:

245

Otra opción es

if (myString?.trim()) {
  ...
}
tim_yates
fuente
3
myString? .trim () devuelve una cadena (o nula o en blanco) en lugar de la pregunta que devuelve un booleano. Supongo que depende de cómo estés usando la salida, solo un 'si' está bien.
Steven
12
oboolean containsData = myString?.trim()
tim_yates
44
@ Steven, la verdad Groovy dice que una cadena nula o vacía es falsa, por lo que puede envolverla ()también si la necesita en una declaración que ya no la convertiría en booleana. Por ejemplo,def myVal = (myString?.trim())
cdeszaq
12
@cdeszaq si lo hace, def myVal = (myString?.trim())entonces myVales un Stringo null, envolverlo entre llaves no lo cambia a un valor booleano. Sin embargo, si lo asigna a una variable booleana o lo usa (myString?.trim()) as booleano (como en mi respuesta) lo usa en una ifdeclaración, entonces, como dice, usará el valor Groovy Truth de la cadena (o la nula)
tim_yates
2
​if ("false") println "that's true too"
tim_yates
9

Puede agregar un método a String para hacerlo más semántico:

String.metaClass.getNotBlank = { !delegate.allWhitespace }

que te permite hacer:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
doelleri
fuente
3
¿Dónde sería el mejor lugar para colocar la modificación metaClass?
cdeszaq