แยกสตริงด้วยตัวคั่น


96

ตอนนี้ฉันกำลังพยายามแยกสตริง1128-2เพื่อให้มีค่าแยกกันสองค่า ตัวอย่างเช่น value1: 1128 และ value2: 2 ดังนั้นฉันจึงสามารถใช้แต่ละค่าแยกกันได้ ฉันพยายามแล้วsplit()แต่ไม่ประสบความสำเร็จ มีวิธีที่เฉพาะเจาะจงในการจัดการ Grails หรือวิธีที่ดีกว่าในการทำเช่นนี้?


ฉันสงสัยว่าทำไมสิ่งนี้ถึงใช้ไม่ได้กับแค่แยก? (a, b) = "ab" .split ("-") ทำงานได้ดีสำหรับฉัน (และฉันเชื่อว่ามันจะใช้งานได้ใน Java ด้วย) ฉันจะใช้มันตลอดเวลา. แก้ไข: เพียงแค่ดูว่ามันแตกต่างกันเล็กน้อย - การแยกจะส่งคืนอาร์เรย์ในขณะที่โทเค็นจะส่งคืน ArrayList แทบจะเหมือนกันใน Groovy การแยกมีข้อดีที่พอร์ตไปยัง Java ได้อย่างง่ายดายฉันไม่คิดว่าโทเค็นจะเป็นวิธี Java บน String (เว้นแต่จะเป็นวิธีที่ค่อนข้างใหม่และฉันพลาดไป)
Bill K

คำตอบ:


175

ลอง:

def (value1, value2) = '1128-2'.tokenize( '-' )

31
นี่คือการอ่านที่ดีบนsplitvs tokenize tothenew.com/blog/groovy-tokenize-vs-split
Snekse

5
Oh, |และต้องระวังถ้าคุณแยกอยู่ในตัวละครบางอย่างเช่นท่อ คุณจะต้องหนี char stackoverflow.com/questions/3842537/…
Snekse

2
ใช่การแบ่ง cos ใช้นิพจน์ทั่วไป
tim_yates

63

โทรมาเป็นsplitไงบ้าง? มันทำงานดังนี้:

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'

10
ฉันคิดว่ามันมีประโยชน์มากในการเพิ่มขอบกรณีที่คุณอาจพบเมื่อแยกโดย "." ถ่าน. ดังนั้นคุณจะต้องหลีกเลี่ยงจุดหากคุณต้องการแยกจุดตามตัวอักษร: String extensionRemoved = filename.split("\\.")[0]; มิฉะนั้นคุณจะแยกนิพจน์ทั่วไปซึ่งหมายถึง "อักขระใด ๆ " สังเกตว่าแบ็กสแลชคู่ที่จำเป็นในการสร้างแบ็กสแลชเดียวในนิพจน์ทั่วไป
Exequiel Barrirero

ขอบคุณสำหรับสิ่งนั้น วิธีนี้เขียนขึ้นราวกับว่าจะสร้างความสับสนให้กับผู้คนให้มากที่สุด
Dustin Oprea

@ExequielBarrirero ความคิดเห็นนั้นช่วยชีวิตฉันวันนี้
user3692823

23

def (value1, value2) = '1128-2'.split('-') ควรทำงาน.

ใครช่วยลองใน Groovy Console ได้ไหม

def (v, z) =  '1128-2'.split('-')

assert v == '1128'
assert z == '2'

1
ฉันมีปัญหากับสิ่งนั้นหากคุณต้องการแยกตัวอักษร regex บางประเภทเช่น หรือ *. คุณจำเป็นต้องหลีกเลี่ยงมันโทเค็นจะใช้งานได้ในกรณีเหล่านั้นด้วย
chandank


4

การแยกไม่ได้ผลอย่างนั้น คุณต้องใช้ tokenize ...

ดูเอกสาร:

http://groovy-lang.org/gdk.html#split ()


การแยกใช้งานได้ดีจริงความเข้าใจไม่ถูกต้องโปรดดูด้านล่าง String [] split_Comma_ByProperty = Stringyouwanttosplit.split (",");
sathya

0
dependencies {
   compile ('org.springframework.kafka:spring-kafka-test:2.2.7.RELEASE') { dep ->
     ['org.apache.kafka:kafka_2.11','org.apache.kafka:kafka-clients'].each { i ->
       def (g, m) = i.tokenize( ':' )
       dep.exclude group: g  , module: m
     }
   }
}

สวัสดี! แม้ว่ารหัสนี้อาจช่วยแก้ปัญหาได้รวมถึงคำอธิบายว่าทำไมจึงแก้ปัญหานี้ได้จะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้อย่างแท้จริงและอาจส่งผลให้มีการโหวตเพิ่มขึ้น โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่แค่คนที่ถามตอนนี้ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้
Brian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.