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?


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'

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'

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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.