Как определить, является ли String отличным от нуля, а не только пробелом в Groovy?

129

Groovy добавляет isAllWhitespace()метод в Strings, и это здорово, но, похоже, нет хорошего способа определить, есть ли в String что-то, кроме пустого пространства.

Лучшее, что мне удалось придумать, это:

myString && !myString.allWhitespace

Но это кажется слишком многословным. Это кажется настолько обычным явлением для проверки, что должен быть более простой способ определить это.

cdeszaq
источник

Ответы:

246

Другой вариант -

if (myString?.trim()) {
  ...
}
tim_yates
источник
3
myString? .trim () возвращает строку (или ноль или пустую строку) вместо вопроса, который возвращает логическое значение. Я думаю, это зависит от того, как вы используете вывод, просто «если» все в порядке.
Стивен
13
илиboolean containsData = myString?.trim()
tim_yates 07
4
@Steven, Groovy правда говорит, что нулевая или пустая строка ложна, поэтому вы можете просто обернуть ее, ()если она вам нужна, в операторе, который еще не сделал бы ее логическим. Например,def myVal = (myString?.trim())
cdeszaq
12
@cdeszaq , если вы делаете , def myVal = (myString?.trim())то myValэто либо Stringили null, обернув его в фигурных скобках не изменяет его логическое значение. Однако, если вы назначаете его логической переменной или используете (myString?.trim()) as booleanили (как в моем ответе) используете его в ifинструкции, то, как вы говорите, он будет использовать значение Groovy Truth строки (или
ноль
2
​if ("false") println "that's true too"
tim_yates
9

Вы можете добавить метод к String, чтобы сделать его более семантическим:

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

что позвольте вам сделать:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
doelleri
источник
3
Где лучше всего разместить модификацию метакласса?
cdeszaq 07