Jak mogę określić, czy String jest różny od null, a nie tylko białe znaki w Groovy?

128

Groovy dodaje isAllWhitespace()metodę do Strings, co jest świetne, ale wydaje się, że nie ma dobrego sposobu na określenie, czy String ma coś innego niż tylko biały znak .

Najlepsze, co udało mi się wymyślić, to:

myString && !myString.allWhitespace

Ale to wydaje się zbyt szczegółowe. Wydaje się, że jest to tak powszechne w przypadku walidacji, że musi istnieć prostszy sposób, aby to ustalić.

cdeszaq
źródło

Odpowiedzi:

245

Inną opcją jest

if (myString?.trim()) {
  ...
}
tim_yates
źródło
3
myString? .trim () zwraca ciąg (lub null lub pusty) zamiast pytania, które zwraca wartość logiczną. Wydaje mi się, że zależy to od tego, jak używasz danych wyjściowych, bo wystarczy „jeśli”.
Steven,
12
lubboolean containsData = myString?.trim()
tim_yates,
4
@Steven, Groovy prawda mówi, że pusty lub pusty ciąg jest fałszywy, więc możesz go po prostu zawinąć, ()jeśli potrzebujesz go w oświadczeniu, które nie uczyniłoby go już wartością logiczną. Na przykładdef myVal = (myString?.trim())
cdeszaq
12
@cdeszaq jeśli nie def myVal = (myString?.trim())następnie myValjest albo Stringalbo null, owijając go w nawiasach nie zmienić go na wartość logiczną. Jeśli jednak przypiszesz go do zmiennej boolowskiej lub użyjesz (myString?.trim()) as booleanlub (jak w mojej odpowiedzi) użyjesz go w ifinstrukcji, to jak mówisz, użyje wartości Groovy Truth ciągu (lub null)
tim_yates
2
​if ("false") println "that's true too"
tim_yates
9

Możesz dodać metodę do String, aby była bardziej semantyczna:

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

co pozwala ci zrobić:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
doelleri
źródło
3
Gdzie najlepiej byłoby umieścić modyfikację metaClass?
cdeszaq