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


129

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

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

myString && !myString.allWhitespace

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

Ответы:


246

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

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

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

3
Где лучше всего разместить модификацию метакласса?
cdeszaq 07
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.