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?


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'

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'

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


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
     }
   }
}

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.