/ / Differenza tra la divisione di una stringa con il carattere e la stringa in scala - stringa, scala, divisione, carattere

Differenza tra divisione di una stringa con carattere e stringa in scala - stringa, scala, divisione, carattere

Sto dividendo una stringa basata su una pipe | personaggio in scala. Vedo due diverse opzioni per farlo. Sono sorpreso di vedere che ho ottenuto due risultati diversi in diversi scenari.

Controllalo:

inserisci la descrizione dell'immagine qui

In caso di stringa, ha anche restituito il carattere pipe mentre in caso di carattere ha restituito i risultati come previsto.

Sono curioso di sapere la differenza in entrambi.

risposte:

4 per risposta № 1

Il fatto è quando stai fornendo un String Parametri questo String può essere un'espressione regolare. E | è un personaggio speciale nel mondo delle espressioni regolari.

Questo ti diventerà più chiaro dopo aver seguito l'esempio,

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

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

Se vuoi ottenere il risultato desiderato dovrai fuggire | utilizzando \

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

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

2 per risposta № 2

In caso di stringa, è necessario eseguire l'escape. uso "\|" invece di "|"

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 per risposta № 3

Alcuni altri modi di sfuggire a un'espressione regolare:

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)

Si noti che le variabili sono interpolate in raw stringhe, quindi bisogna stare attenti $.

Q è particolarmente utile quando hai diversi personaggi da sfuggire e non vuoi mettere una barra rovesciata prima di ognuno di essi.