Memisahkan String dengan pembatas

96

Saat ini saya mencoba membagi string 1128-2sehingga saya dapat memiliki dua nilai terpisah. Misalnya, nilai1: 1128 dan nilai2: 2, sehingga saya dapat menggunakan setiap nilai secara terpisah. Saya telah mencoba split()tetapi tidak berhasil. Adakah cara khusus Grails menangani ini, atau cara yang lebih baik untuk melakukannya?

thehoule64
sumber
Saya ingin tahu mengapa ini tidak berhasil hanya dengan split? (a, b) = "ab" .split ("-") berfungsi dengan baik untuk saya (Dan saya yakin ini juga akan berhasil di Java). Saya menggunakannya sepanjang waktu. EDIT: Hanya dengan melihatnya, mereka sedikit berbeda - split mengembalikan array sementara tokenize mengembalikan ArrayList. Hampir sama di Groovy, perpecahan memiliki keuntungan bahwa port dengan mudah ke Java, saya tidak berpikir tokenize adalah metode java pada String (kecuali itu yang cukup baru dan saya melewatkannya)
Bill K

Jawaban:

63

Bagaimana Anda menelepon split? Ini bekerja seperti ini:

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'
ataylor.dll
sumber
10
Saya pikir itu sangat berguna untuk menambahkan casing tepi yang mungkin Anda temui saat membelah dengan '.' arang. Jadi, Anda harus mengosongkan titik jika ingin memisahkan titik literal: String extensionRemoved = filename.split("\\.")[0]; Jika tidak, Anda akan memisahkan pada regex., Yang berarti "karakter apa pun". Perhatikan garis miring terbalik ganda yang diperlukan untuk membuat satu garis miring terbalik di regex.
Exequiel Barrirero
Terima kasih untuk itu. Metode ini ditulis untuk membingungkan sebanyak mungkin orang.
Dustin Oprea
@ExequielBarrirero Komentar itu menyelamatkan hidup saya hari ini
pengguna3692823
23

def (value1, value2) = '1128-2'.split('-') harus bekerja.

Adakah yang bisa mencoba ini di Groovy Console?

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

assert v == '1128'
assert z == '2'
dmahapatro.dll
sumber
1
Saya punya masalah dengan itu, jika Anda ingin membagi beberapa jenis karakter regex seperti. atau *. Anda harus menghindarinya, tokenisasi berfungsi dalam kasus tersebut juga.
Chandank
7

Anda juga bisa melakukan:

Integer a = '1182-2'.split('-')[0] as Integer
Integer b = '1182-2'.split('-')[1] as Integer

//a=1182 b=2
davidddp
sumber
4

split tidak bekerja seperti itu secara groovy. Anda harus menggunakan tokenisasi ...

Lihat dokumennya:

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

Angstrom Beebe
sumber
split berfungsi dengan baik sebenarnya, pemahaman salah, lihat di bawah, 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
     }
   }
}
qwas
sumber
Halo! Meskipun kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan tentang bagaimana dan mengapa ini menyelesaikan masalah akan sangat membantu meningkatkan kualitas posting Anda, dan mungkin menghasilkan lebih banyak suara. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, bukan hanya orang yang bertanya sekarang. Harap edit jawaban Anda untuk menambahkan penjelasan dan memberikan indikasi batasan dan asumsi apa yang berlaku.
Brian