Come posso determinare se una stringa è non nulla e non solo uno spazio bianco in Groovy?


128

Groovy aggiunge il isAllWhitespace()metodo a Strings, il che è fantastico, ma non sembra esserci un buon modo per determinare se una String ha qualcosa di diverso dal semplice spazio bianco.

Il meglio che sono riuscito a trovare è:

myString && !myString.allWhitespace

Ma sembra troppo prolisso. Sembra una cosa così comune per la convalida che deve esserci un modo più semplice per determinarla.

Risposte:


245

Un'altra opzione è

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

3
myString? .trim () restituisce una stringa (o null o blank) invece della domanda che restituisce un booleano. Immagino che dipenda da come stai usando l'output, solo per un "se" va bene.
Steven

12
oboolean containsData = myString?.trim()
tim_yates

4
@Steven, la verità di Groovy dice che una stringa nulla o vuota è falsa, quindi puoi semplicemente racchiuderla ()anche se ne hai bisogno in un'istruzione che non la renderebbe già booleana. Ad esempio,def myVal = (myString?.trim())
cdeszaq

12
@cdeszaq se lo fai def myVal = (myString?.trim())allora myValè Stringo null, avvolgendolo tra parentesi graffe non lo cambia in un booleano. Tuttavia, se lo assegni a una variabile booleana o lo usi (myString?.trim()) as booleano (come nella mia risposta) lo usi in ifun'istruzione, come dici tu utilizzerà il valore Groovy Truth della stringa (o il null)
tim_yates

2
​if ("false") println "that's true too"
tim_yates

9

Potresti aggiungere un metodo a String per renderlo più semantico:

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

cosa ti permette di fare:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true

3
Dove sarebbe il posto migliore per inserire la modifica metaClass?
cdeszaq
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.