Stringa di divisione con delimitatore


94

Attualmente sto cercando di dividere una stringa in 1128-2modo da poter avere due valori separati. Ad esempio, valore1: 1128 e valore2: 2, in modo da poter utilizzare ciascun valore separatamente. Ho provato split()ma senza successo. C'è un modo specifico in cui Grails gestisce questo, o un modo migliore per farlo?


Sono curioso di sapere perché questo non ha funzionato solo con la divisione? (a, b) = "ab" .split ("-") funziona bene per me (e credo che funzionerebbe anche in Java). Io lo uso per tutto il tempo. EDIT: solo guardandoli sono leggermente diversi: split restituisce un array mentre tokenize restituisce un ArrayList. Praticamente la stessa cosa in Groovy, la divisione ha il vantaggio di essere facilmente trasferibile su Java, non penso che tokenize sia un metodo java su String (a meno che non sia abbastanza nuovo e mi sia mancato)
Bill K

Risposte:



61

Come stai chiamando split? Funziona così:

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

10
Penso che sia molto utile aggiungere un caso limite in cui potresti imbatterti quando ti dividi con "." char. Quindi dovrai eseguire l'escape del punto se vuoi dividerlo su un punto letterale: String extensionRemoved = filename.split("\\.")[0]; Altrimenti stai dividendo sulla regex., Che significa "qualsiasi carattere". Nota il doppio backslash necessario per creare un singolo backslash nella regex.
Exequiel Barrirero

Grazie per quello. Questo metodo è stato scritto come per confondere quante più persone possibile.
Dustin Oprea

@ExequielBarrirero Quel commento mi ha salvato la vita oggi
user3692823

22

def (value1, value2) = '1128-2'.split('-') dovrebbe funzionare.

Qualcuno può provarlo su Groovy Console?

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

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

1
Ho avuto problemi con questo, se vuoi dividere su qualche tipo di caratteri regex come. o *. Devi evitarlo, il tokenize funziona anche in quei casi.
chandank

5

Puoi anche fare:

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

Ciao! Sebbene questo codice possa risolvere la domanda, inclusa una spiegazione di come e perché questo risolve il problema aiuterebbe davvero a migliorare la qualità del tuo post e probabilmente si tradurrebbe in più voti positivi. Ricorda che stai rispondendo alla domanda per i lettori in futuro, non solo alla persona che chiede ora. Si prega di modificare la risposta per aggiungere spiegazioni e dare un'indicazione di ciò si applicano le limitazioni e le assunzioni.
Brian
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.