String mit Trennzeichen teilen


93

Ich versuche gerade, eine Zeichenfolge zu teilen, 1128-2damit ich zwei separate Werte haben kann. Zum Beispiel Wert1: 1128 und Wert2: 2, damit ich dann jeden Wert separat verwenden kann. Ich habe es versucht, split()aber ohne Erfolg. Gibt es eine bestimmte Art und Weise, wie Grails damit umgeht, oder eine bessere Art, dies zu tun?


Ich bin gespannt, warum das nicht mit Split funktioniert hat. (a, b) = "ab" .split ("-") funktioniert gut für mich (und ich glaube, es würde auch in Java funktionieren). Ich benutze es die ganze Zeit. BEARBEITEN: Wenn man es nur betrachtet, sind sie etwas anders - split gibt ein Array zurück, während tokenize eine ArrayList zurückgibt. Praktisch dasselbe in Groovy, der Split hat den Vorteil, dass er leicht nach Java portiert werden kann. Ich denke nicht, dass Tokenize eine Java-Methode für String ist (es sei denn, es ist eine ziemlich neue und ich habe sie verpasst)
Bill K

Antworten:



61

Wie rufst du an split? Es funktioniert so:

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

10
Ich denke, es ist sehr nützlich, einen Randfall hinzuzufügen, auf den Sie möglicherweise stoßen, wenn Sie durch das '.' Teilen. verkohlen. Sie müssen also den Punkt maskieren, wenn Sie einen wörtlichen Punkt teilen möchten: String extensionRemoved = filename.split("\\.")[0]; Andernfalls teilen Sie den regulären Ausdruck, was "beliebiges Zeichen" bedeutet. Beachten Sie den doppelten Backslash, der zum Erstellen eines einzelnen Backslashs im regulären Ausdruck erforderlich ist.
Exequiel Barrirero

Dank dafür. Diese Methode wurde geschrieben, um so viele Menschen wie möglich zu verwirren.
Dustin Oprea

@ExequielBarrirero Dieser Kommentar hat mir heute das Leben gerettet
user3692823

22

def (value1, value2) = '1128-2'.split('-') sollte arbeiten.

Kann jemand dies bitte in Groovy Console versuchen?

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

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

1
Ich hatte ein Problem damit, wenn Sie auf eine Art von Regex-Zeichen wie teilen möchten. oder *. Sie müssen ihm entkommen, die Tokenisierung funktioniert auch in diesen Fällen.
Chandank

5

Sie können auch tun:

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

Hallo! Während dieser Code die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen, die Qualität Ihres Beitrags zu verbessern, und wahrscheinlich zu mehr Up-Votes führen. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt. Bitte bearbeiten Sie Ihre Antwort, um Erklärungen hinzuzufügen und anzugeben, welche Einschränkungen und Annahmen gelten.
Brian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.