Sınırlayıcı ile Dize Bölme


96

Şu anda 1128-2iki ayrı değere sahip olabilmek için bir dizeyi bölmeye çalışıyorum . Örneğin, değer1: 1128 ve değer2: 2, böylece her değeri ayrı ayrı kullanabilirim. Denedim split()ama başarılı olamadım. Grails'in bunu ele almasının belirli bir yolu var mı yoksa daha iyi bir yolu var mı?


Bunun neden sadece split ile çalışmadığını merak ediyorum? (a, b) = "ab" .split ("-") benim için iyi çalışıyor (Ve Java'da da çalışacağına inanıyorum). Ben her zaman kullanırım. DÜZENLEME: Sadece baktığımızda biraz farklılar - split bir dizi döndürürken, tokenize bir ArrayList döndürür. Groovy'de neredeyse aynı şey, bölünmenin kolayca Java'ya bağlanması avantajı var, tokenize'nin String'de bir java yöntemi olduğunu düşünmüyorum (oldukça yeni bir yöntem değilse ve onu kaçırmadıysam)
Bill K

Yanıtlar:



63

Nasıl splitarıyorsun Şu şekilde çalışır:

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

10
'.' İle bölünürken karşılaşabileceğiniz bir uç durum eklemenin çok yararlı olduğunu düşünüyorum. karakter. Bu nedenle, gerçek bir noktaya bölmek istiyorsanız noktadan kaçmanız gerekir: String extensionRemoved = filename.split("\\.")[0]; Aksi takdirde, "herhangi bir karakter" anlamına gelen normal ifadeye bölünürsünüz . Normal ifadede tek bir ters eğik çizgi oluşturmak için gereken çift ters eğik çizgiye dikkat edin.
Exequiel Barrirero

Bunun için teşekkürler. Bu yöntem, olabildiğince çok insanın kafasını karıştıracakmış gibi yazılmıştır.
Dustin Oprea

@ExequielBarrirero Bu yorum bugün hayatımı kurtardı
user3692823

23

def (value1, value2) = '1128-2'.split('-') çalışmalı.

Herkes bunu Groovy Konsolunda deneyebilir mi?

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

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

1
Bir tür normal ifade karakterine bölmek istiyorsanız, bununla ilgili bir sorun yaşadım. veya *. Ondan kaçmanız gerekir, simge bu durumlarda da çalışır.
chandank

7

Ayrıca şunları da yapabilirsiniz:

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

Merhaba! Bu kod soruyu çözebilirken, sorunun nasıl ve neden çözüldüğüne dair bir açıklama da dahil olmak üzere , gönderinizin kalitesini artırmaya gerçekten yardımcı olur ve muhtemelen daha fazla oy almanıza neden olur. Sadece şimdi soran kişi için değil, gelecekte okuyucular için soruyu cevapladığınızı unutmayın. Açıklamalar eklemek ve hangi sınırlamaların ve varsayımların geçerli olduğuna dair bir gösterge vermek için lütfen yanıtınızı düzenleyin .
Brian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.