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

Odpowiedzi:


245

Inną opcją jest

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

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

3
Gdzie najlepiej byłoby umieścić modyfikację metaClass?
— cdeszaq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.