ฉันจะตรวจสอบได้อย่างไรว่าสตริงไม่เป็นโมฆะและไม่ใช่เฉพาะช่องว่างใน Groovy


128

Groovy เพิ่มisAllWhitespace()วิธีการในการ Strings ซึ่งเป็นที่ดี แต่มีไม่ดูเหมือนจะเป็นสิ่งที่ดีวิธีการกำหนดถ้าสตริงมีสิ่งอื่นที่ไม่ใช่เพียงแค่พื้นที่สีขาวอยู่ในนั้น

สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือ:

myString && !myString.allWhitespace

แต่ดูเหมือนจะฟุ่มเฟื่อยเกินไป ดูเหมือนจะเป็นเรื่องธรรมดาสำหรับการตรวจสอบความถูกต้องว่าจะต้องมีวิธีที่ง่ายกว่านี้ในการพิจารณา

คำตอบ:


245

อีกทางเลือกหนึ่งคือ

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

3
myString? .trim () ส่งคืนสตริง (หรือว่างหรือว่าง) แทนคำถามที่ส่งคืนบูลีน ฉันเดาว่ามันขึ้นอยู่กับว่าคุณใช้เอาต์พุตอย่างไรเพียงแค่ 'if' ก็ใช้ได้
Steven

12
หรือboolean containsData = myString?.trim()
tim_yates

4
@Steven ความจริง Groovy บอกว่าสตริงว่างหรือว่างเป็นเท็จดังนั้นคุณสามารถ()รวมเข้าด้วยกันได้หากคุณต้องการในข้อความที่จะไม่ทำให้เป็นบูลีน ตัวอย่างเช่นdef myVal = (myString?.trim())
cdeszaq

12
@cdeszaq ถ้าคุณทำdef myVal = (myString?.trim())แล้วmyValเป็นStringหรือการnullห่อด้วยเครื่องหมายวงเล็บจะไม่เปลี่ยนเป็นบูลีน อย่างไรก็ตามหากคุณกำหนดให้กับตัวแปรบูลีนหรือใช้(myString?.trim()) as booleanหรือ (ตามคำตอบของฉัน) ใช้ในifคำสั่งดังที่คุณบอกว่าจะใช้ค่า Groovy Truth ของสตริง (หรือ null)
tim_yates

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

9

คุณสามารถเพิ่มวิธีการใน String เพื่อให้มีความหมายมากขึ้น:

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

ซึ่งให้คุณทำ:

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

3
สถานที่ที่ดีที่สุดในการปรับเปลี่ยน metaClass คือที่ไหน?
cdeszaq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.