Como posso determinar se uma String é não nula e não apenas espaço em branco no Groovy?


128

Groovy adiciona o isAllWhitespace()método a Strings, o que é ótimo, mas não parece haver uma boa maneira de determinar se uma String possui algo diferente de apenas espaço em branco.

O melhor que pude apresentar é:

myString && !myString.allWhitespace

Mas isso parece muito detalhado. Parece uma coisa tão comum para validação que deve haver uma maneira mais simples de determinar isso.

Respostas:


245

Outra opção é

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

3
myString? .trim () retorna uma string (ou nula ou em branco) em vez da pergunta que retorna um valor booleano. Eu acho que depende de como você está usando a saída, por apenas um 'se' está tudo bem.
7372 Steven

12
ouboolean containsData = myString?.trim()
tim_yates

4
@ Steven, a verdade Groovy diz que uma string nula ou vazia é falsa, então você pode envolvê-la ()também se precisar em uma declaração que não a tornaria booleana. Por exemplo,def myVal = (myString?.trim())
cdeszaq 7/12/12

12
@cdeszaq, se você o fizer def myVal = (myString?.trim()), myValé um Stringou null, envolvê-lo em chaves não o altera para um booleano. No entanto, se você atribuí-lo a uma variável booleana ou usar (myString?.trim()) as booleanou (como na minha resposta) usá-lo em uma ifdeclaração, então, como você diz, ele usará o valor Groovy Truth da string (ou o nulo)
tim_yates

2
​if ("false") println "that's true too"
tim_yates

9

Você pode adicionar um método ao String para torná-lo mais semântico:

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

o que vamos fazer:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true

3
Qual seria o melhor lugar para colocar a modificação da metaClass?
Cdeszaq
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.