Làm cách nào để xác định xem một Chuỗi có phải là không rỗng và không chỉ có khoảng trắng trong Groovy hay không?


128

Groovy thêm isAllWhitespace()phương thức vào Strings, điều này rất tuyệt, nhưng dường như không có cách nào tốt để xác định xem một Chuỗi có thứ gì đó khác ngoài khoảng trắng trong đó hay không.

Điều tốt nhất tôi có thể nghĩ ra là:

myString && !myString.allWhitespace

Nhưng điều đó có vẻ quá dài dòng. Điều này có vẻ như là một điều phổ biến để xác nhận nên phải có một cách đơn giản hơn để xác định điều này.

Câu trả lời:


245

Một lựa chọn khác là

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

3
myString? .trim () trả về một chuỗi (hoặc null hoặc trống) thay vì câu hỏi trả về boolean. Tôi đoán nó phụ thuộc vào cách bạn sử dụng đầu ra, chỉ với một 'nếu' là ổn.
Steven

12
hoặcboolean containsData = myString?.trim()
tim_yates

4
@Steven, Groovy truth nói rằng một chuỗi rỗng hoặc rỗng là sai, vì vậy bạn cũng có thể bọc nó vào ()nếu bạn cần nó trong một câu lệnh chưa làm cho nó trở thành boolean. Ví dụ:def myVal = (myString?.trim())
cdeszaq

12
@cdeszaq nếu bạn làm vậy def myVal = (myString?.trim())thì myVallà a Stringhoặc null, quấn nó trong dấu ngoặc nhọn không thay đổi nó thành boolean. Tuy nhiên, nếu bạn gán nó vào một biến boolean hoặc sử dụng (myString?.trim()) as booleanhoặc (như trong câu trả lời của tôi) sử dụng nó trong một iftuyên bố, sau đó như bạn nói nó sẽ sử dụng giá trị Groovy Truth của chuỗi (hoặc null)
tim_yates

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

9

Bạn có thể thêm một phương thức vào String để làm cho nó có ngữ nghĩa hơn:

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

bạn hãy làm gì:

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

3
Nơi tốt nhất để đặt sửa đổi metaClass là ở đâu?
cdeszaq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.