¿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.

Respuestas:


245

Otra opción es

if (myString?.trim()) {
  ...
}

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

3
¿Dónde sería el mejor lugar para colocar la modificación metaClass?
cdeszaq
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.