/ / Różnica między dzieleniem łańcucha znaków i znaków w scala - string, scala, split, character

Różnica między dzieleniem ciągu znaków a ciągiem znaków w scala - string, scala, split, character

Rozdzielam ciąg oparty na rurze | postać w scala. Widzę dwie różne opcje, aby to zrobić. Jestem zaskoczony, widząc dwa różne wyniki w różnych scenariuszach.

Sprawdź to:

wprowadź opis obrazu tutaj

W przypadku ciągu zwracał również znak potoku, natomiast w przypadku znaku zwracał wyniki zgodnie z oczekiwaniami.

Ciekaw jestem, jaka jest różnica między nimi.

Odpowiedzi:

4 dla odpowiedzi № 1

Chodzi o to, kiedy zapewniasz String sparametryzuj to String może być wyrażeniem regularnym. I | jest specjalną postacią w świecie wyrażeń regularnych.

Stanie się to dla ciebie bardziej zrozumiałe po następującym przykładzie:

scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("|")
res7: Array[String] = Array(a, b, c, d, e, f)

Jeśli chcesz uzyskać pożądany rezultat, musisz uciec | za pomocą \

scala> val s1 = "abcdef"
s1: String = abcdef

scala> s1.split("\|")
res7: Array[String] = Array(abcdef)

2 dla odpowiedzi nr 2

W przypadku sznurka wymaga ucieczki. posługiwać się "\|" zamiast "|"

scala> "a|b|c|d".split("|")
res19: Array[String] = Array(a, |, b, |, c, |, d)

scala> "a|b|c|d".split("\|")
res20: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("|")
res21: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""|""")
res23: Array[String] = Array(a, b, c, d)

1 dla odpowiedzi nr 3

Kilka innych sposobów na uniknięcie wyrażenia regularnego:

scala> "a|b|c|d".split(raw"|")
res114: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split(raw"Q|")
res115: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("""Q|""")
res116: Array[String] = Array(a, b, c, d)

scala> "a|b|c|d".split("\Q|")
res117: Array[String] = Array(a, b, c, d)

Zauważ, że zmienne są interpolowane w raw struny, więc trzeba być ostrożnym $.

Q jest szczególnie przydatny, gdy masz kilka postaci do ucieczki i nie chcesz wstawiać ukośnika przed każdym z nich.