Comment puis-je déterminer si une chaîne n'est pas nulle et pas seulement des espaces dans Groovy?

128

Groovy ajoute la isAllWhitespace()méthode pour cordes, qui est grande, mais il ne semble pas être une bonne façon de déterminer si une chaîne a autre chose que simplement l' espace blanc dedans.

Le mieux que j'ai pu trouver est:

myString && !myString.allWhitespace

Mais cela semble trop verbeux. Cela semble être une chose tellement courante pour la validation qu'il doit y avoir un moyen plus simple de le déterminer.

cdeszaq
la source

Réponses:

245

Une autre option est

if (myString?.trim()) {
  ...
}
tim_yates
la source
3
myString? .trim () renvoie une chaîne (ou null ou vide) au lieu de la question qui renvoie un booléen. Je suppose que cela dépend de la façon dont vous utilisez la sortie, pour juste un «si» c'est bien.
Steven
12
ouboolean containsData = myString?.trim()
tim_yates
4
@Steven, Groovy vérité dit qu'une chaîne nulle ou vide est fausse, vous pouvez donc simplement l'envelopper ()si vous en avez besoin dans une instruction qui n'en ferait pas déjà un booléen. Par exemple,def myVal = (myString?.trim())
cdeszaq
12
@cdeszaq si vous le faites def myVal = (myString?.trim())alors myValest soit un Stringou null, le mettre entre accolades ne le change pas en booléen. Cependant, si vous l'assignez à une variable booléenne ou utilisez (myString?.trim()) as booleanou (comme dans ma réponse) utilisez-le dans une ifinstruction, alors comme vous le dites, il utilisera la valeur Groovy Truth de la chaîne (ou la valeur nulle)
tim_yates
2
​if ("false") println "that's true too"
tim_yates
9

Vous pouvez ajouter une méthode à String pour la rendre plus sémantique:

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

ce que vous faites:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
Doelleri
la source
3
Où serait le meilleur endroit pour placer la modification de la métaClasse?
cdeszaq