Wie kann ich feststellen, ob ein String nicht null ist und nicht nur Leerzeichen in Groovy?

128

Groovy fügt die isAllWhitespace()Methode zu Strings hinzu, was großartig ist, aber es scheint keine gute Möglichkeit zu geben, festzustellen, ob ein String etwas anderes als nur Leerzeichen enthält.

Das Beste, was ich mir einfallen lassen konnte, ist:

myString && !myString.allWhitespace

Aber das scheint zu ausführlich. Dies scheint für die Validierung so häufig zu sein, dass es einen einfacheren Weg geben muss, dies zu bestimmen.

cdeszaq
quelle

Antworten:

245

Eine andere Option ist

if (myString?.trim()) {
  ...
}
tim_yates
quelle
3
myString? .trim () gibt eine Zeichenfolge (oder null oder leer) anstelle der Frage zurück, die einen Booleschen Wert zurückgibt. Ich denke, es hängt davon ab, wie Sie die Ausgabe verwenden, nur für ein "Wenn" ist es in Ordnung.
Steven
12
oderboolean containsData = myString?.trim()
tim_yates
4
@Steven, Groovy Wahrheit sagt, dass eine null oder leere Zeichenfolge falsch ist, so dass Sie es auch einfach einschließen können, ()wenn Sie es in einer Anweisung benötigen, die es nicht bereits zu einem Booleschen Wert machen würde. Zum Beispieldef myVal = (myString?.trim())
Cdeszaq
12
@cdeszaq wenn Sie das tun , def myVal = (myString?.trim())dann myValist entweder ein Stringoder nulles in Klammern Einwickeln es nicht zu einem boolean nicht ändert. Wenn Sie es jedoch einer booleschen Variablen zuweisen (myString?.trim()) as booleanoder in einer ifAnweisung verwenden oder (wie in meiner Antwort) verwenden , wird, wie Sie sagen, der Groovy Truth-Wert der Zeichenfolge (oder der Null) verwendet
tim_yates
2
​if ("false") println "that's true too"
tim_yates
9

Sie können String eine Methode hinzufügen, um ihn semantischer zu gestalten:

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

was wir machen lassen:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
doelleri
quelle
3
Wo könnte die MetaClass-Änderung am besten platziert werden?
Cdeszaq