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?

thehoule64
quelle
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'
ataylor
quelle
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'
dmahapatro
quelle
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
davidddp
quelle
4

split funktioniert in groovy nicht so. Sie müssen Tokenize verwenden ...

Siehe die Dokumente:

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

Angstrom Beebe
quelle
split funktioniert eigentlich gut, das Verständnis ist falsch, siehe unten, 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
quelle
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