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:
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ď č. 1Ide 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.