Bagaimana cara menentukan apakah String bukan null dan bukan hanya spasi di Groovy?

128

Groovy menambahkan isAllWhitespace()metode ke Strings, yang bagus, tetapi tampaknya tidak ada cara yang baik untuk menentukan apakah String memiliki sesuatu selain hanya ruang putih di dalamnya.

Yang terbaik yang bisa saya dapatkan adalah:

myString && !myString.allWhitespace

Tapi sepertinya itu terlalu bertele-tele. Ini sepertinya hal yang umum untuk validasi sehingga harus ada cara yang lebih sederhana untuk menentukannya.

cdeszaq.dll
sumber

Jawaban:

245

Pilihan lainnya adalah

if (myString?.trim()) {
  ...
}
tim_yates
sumber
3
myString? .trim () mengembalikan string (atau null atau blank) alih-alih pertanyaan yang mengembalikan boolean. Saya kira itu tergantung bagaimana Anda menggunakan output, hanya untuk 'jika' tidak masalah.
Steven
12
atauboolean containsData = myString?.trim()
tim_yates
4
@Steven, kebenaran Groovy mengatakan bahwa null atau string kosong itu salah, jadi Anda bisa membungkusnya ()juga jika Anda membutuhkannya dalam pernyataan yang tidak akan membuatnya menjadi boolean. Misalnya,def myVal = (myString?.trim())
cdeszaq
12
@cdeszaq jika Anda melakukannya def myVal = (myString?.trim())maka myValadalah a Stringatau null, membungkusnya dengan tanda kurung tidak akan mengubahnya menjadi boolean. Namun, jika Anda menetapkannya ke variabel boolean atau menggunakan (myString?.trim()) as booleanatau (seperti dalam jawaban saya) menggunakannya dalam sebuah ifpernyataan, maka seperti yang Anda katakan itu akan menggunakan nilai Groovy Truth dari string (atau null)
tim_yates
2
​if ("false") println "that's true too"
tim_yates
9

Anda dapat menambahkan metode ke String agar lebih semantik:

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

yang memungkinkan Anda melakukannya:

groovy:000> foo = ''
===> 
groovy:000> foo.notBlank
===> false
groovy:000> foo = 'foo'
===> foo
groovy:000> foo.notBlank
===> true
doelleri
sumber
3
Di manakah tempat terbaik untuk meletakkan modifikasi metaClass?
cdeszaq