Dzielenie łańcucha z ogranicznikiem

96

Obecnie próbuję podzielić ciąg, 1128-2aby mieć dwie oddzielne wartości. Na przykład wartość1: 1128 i wartość2: 2, dzięki czemu mogę użyć każdej wartości osobno. Próbowałem, split()ale bezskutecznie. Czy istnieje konkretny sposób, w jaki Grails sobie z tym radzi, czy może lepszy sposób na zrobienie tego?

thehoule64
źródło
Jestem ciekawy, dlaczego to nie zadziałało z samym splitem? (a, b) = "ab" .split ("-") działa dobrze dla mnie (i sądzę, że będzie działać również w Javie). Używam go cały czas. EDYCJA: Patrząc na to, są nieco inne - split zwraca tablicę, podczas gdy tokenize zwraca ArrayList. Praktycznie to samo w Groovy, podział ma tę zaletę, że łatwo przenosi się na Javę, nie sądzę, że tokenize to metoda Java na String (chyba że jest całkiem nowa i przegapiłem ją)
Bill K

Odpowiedzi:

63

Jak dzwonisz split? Działa to tak:

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'
ataylor
źródło
10
Myślę, że bardzo przydatne jest dodanie skrajnego przypadku, na który możesz napotkać podczas dzielenia przez „.” zwęglać. Musisz więc uciec przed kropką, jeśli chcesz podzielić na dosłowną kropkę: String extensionRemoved = filename.split("\\.")[0]; W przeciwnym razie dzielisz na wyrażenie regularne, co oznacza „dowolny znak”. Zwróć uwagę na podwójny lewy ukośnik potrzebny do utworzenia pojedynczego odwrotnego ukośnika w wyrażeniu regularnym.
Exequiel Barrirero
Dziękuję za to. Ta metoda została napisana tak, aby zmylić jak najwięcej osób.
Dustin Oprea
@ExequielBarrirero Ten komentarz uratował mi dzisiaj życie
user3692823
23

def (value1, value2) = '1128-2'.split('-') powinno działać.

Czy ktoś może spróbować tego w Groovy Console?

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

assert v == '1128'
assert z == '2'
dmahapatro
źródło
1
Miałem z tym problem, jeśli chcesz podzielić na niektóre typy znaków regex, takie jak. lub *. Musisz od tego uciec, tokenizacja działa również w takich przypadkach.
chandank
6

Możesz też:

Integer a = '1182-2'.split('-')[0] as Integer
Integer b = '1182-2'.split('-')[1] as Integer

//a=1182 b=2
davidddp
źródło
4

split nie działa w ten sposób w groovie. musisz użyć tokenize ...

Zobacz dokumentację:

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

Angstrom Beebe
źródło
split działa właściwie, rozumienie jest błędne, zobacz poniżej, String [] split_Comma_ByProperty = Stringyouwanttosplit.split (",");
satja
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
źródło
Cześć! Chociaż ten kod może rozwiązać problem, w tym wyjaśnienie, jak i dlaczego to rozwiązuje problem, naprawdę pomogłoby poprawić jakość twojego posta i prawdopodobnie zaowocowałoby większą liczbą pozytywnych głosów. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a nie tylko osoba, która zapyta teraz. Proszę edytować swoje odpowiedzi, aby dodać wyjaśnień i dać wskazówkę co zastosować ograniczenia i założenia.
Brian