Як я можу визначити, чи є рядок ненульовим і не лише пробілом у Groovy?


128

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

Найкраще, що мені вдалося придумати, це:

myString && !myString.allWhitespace

Але це здається занадто багатослівним. Це здається настільки поширеною справою для перевірки, що повинен бути більш простий спосіб цього визначити.

Відповіді:


245

Інший варіант є

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

3
myString? .trim () повертає рядок (або null або blank) замість питання, яке повертає булеве значення. Я думаю, це залежить від того, як ви використовуєте вихід, для просто "якщо" це добре.
Стівен

12
абоboolean containsData = myString?.trim()
tim_yates

4
@Steven, Groovy правда говорить, що нульова чи порожня рядок є помилковою, тому ви можете просто загорнути її (), якщо вам це потрібно в заяві, яка вже не зробить це булевим. Наприклад,def myVal = (myString?.trim())
cdeszaq

12
@cdeszaq , якщо ви робите , def myVal = (myString?.trim())то myValце або Stringабо null, обернувши його в фігурних дужках не змінює його логічне значення. Однак якщо ви присвоїте його булевій змінній або використовуєте (myString?.trim()) as booleanабо (як у моїй відповіді) використовуєте її у ifвиписці, то, як ви кажете, воно використовуватиме значення Groovy Truth рядка (або null)
tim_yates

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
Де найкраще розмістити модифікацію metaClass?
cdeszaq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.