2012-07-01 11 views
19

Poniżej znajduje się moje dane wyjściowe REPL. Nie jestem pewien, dlaczego string.split nie działa tutaj.scala string.split nie działa

val s = "Pedro|groceries|apple|1.42" 
s: java.lang.String = Pedro|groceries|apple|1.42 

scala> s.split("|") 
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2) 

Odpowiedz

56

Jeśli używasz ofert, prosisz o podzielenie na wyrażenia regularne. | jest znakiem "lub", więc Twoje wyrażenie regularne pasuje do niczego lub nic. Więc wszystko jest podzielone.

Jeśli używasz split('|') lub split("""\|""") powinieneś dostać to, co chcesz.

+0

dobry. W scala, jaka jest różnica między "" i ""? – riship89

+2

'" "stuff" "" cytuje ciąg literowy. '" stuff "interpretuje znaki ucieczki. Ponieważ odwrotny ukośnik jest znakiem ucieczki _ob w łańcuchach Java _ i _ regexes, musisz uciec z znaku ucieczki, aby wprowadzić go do regex: '" \\ | "'. Jest to mylące szybko, więc lepiej używać potrójnych cytatów i używać ciągów literalnych. –

+0

i ... jest "somestring" tak samo jak "" "somestring" ""? – riship89

3

Split przyjmuje wyrażenie regularne jako pierwszy argument, więc twoje połączenie jest interpretowane jako "pusty łańcuch lub pusty ciąg". Aby uzyskać oczekiwane zachowanie, musisz uciec od znaku potoku "\\ |".

5

| jest specjalnym wyrażenie regularne charakter, który jest używany jako operator logiczny dla OR operacji.

Od java.lang.String#split(String regex); trwa w wyrażeniu regularnym, jesteś dzielenie ciąg z „none albo żadna”, która jest cała kolejna specjalność o regularnym podziału wypowiedzi, gdzie żaden zasadniczo oznacza „między każdego pojedynczego znaku ".

Aby uzyskać to, co chcesz, musisz uciec poprawnie od wzoru regex. Aby uciec od wzorca, trzeba poprzedzić znak z \ a od \ jest specjalnym String znak (myślę \t i \r na przykład), trzeba rzeczywiście podwójny ucieczka tak że będziesz skończyć z s.split("\\|").

Aby uzyskać pełną składnię wyrażenia regularnego Javy, zobacz java.util.regex.Pattern javadoc.

Powiązane problemy