/ Rozdiel medzi rozdelením reťazca s charakterom a reťazcom v škále - reťazec, scala, rozdelenie, znak

Rozdiel medzi rozdelením reťazca znakom a reťazcom v škále - reťazec, scala, rozdelenie, znak

Rozdelím reťazec na základe potrubia | znak v scade. Vidím dve rôzne možnosti, ako to urobiť. Som prekvapený, že v rôznych scenároch som získal dva rôzne výsledky.

Pozri na toto:

tu zadajte popis obrázku

V prípade reťazca tiež vrátil znak potrubia, zatiaľ čo v prípade znaku vrátil výsledky podľa očakávania.

Som zvedavý na to, aby som poznal rozdiel v oboch.

odpovede:

4 pre odpoveď č. 1

Ide o to, keď poskytujete String parameter String môže byť regulárny výraz. a | je zvláštnym znakom vo svete regulárnych výrazov.

To vám bude jasnejšie po nasledujúcom príklade,

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

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

Ak chcete získať požadovaný výsledok, musíte uniknúť | použitím \

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

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

2 pre odpoveď č. 2

V prípade reťazca potrebuje únik. použitie "\|" namiesto "|"

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 pre odpoveď č. 3

Niekoľko spôsobov, ako uniknúť regexu:

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)

Všimnite si, že premenné sú interpolované v raw reťazca, takže je potrebné byť opatrní $.

Q je obzvlášť užitočné, keď máte niekoľko znakov na útek a nechcete, aby pred každým z nich nasadili spätné lomítko.