2016-09-04 3 views
0

Ich teile eine Zeichenkette basierend auf einer Leitung | Zeichen in Scala. Ich sehe zwei verschiedene Möglichkeiten, dies zu tun. Ich bin überrascht zu sehen, dass ich zwei verschiedene Ergebnisse in verschiedenen Szenarien habe. dieseUnterschied zwischen Teilen einer Zeichenkette mit Zeichen und Zeichenkette in Scala

Check out:

enter image description here

Bei String, auch Pipe-Zeichen zurück, während im Falle des Charakters es die Ergebnisse zurückgegeben, wie erwartet.

Ich bin neugierig, den Unterschied in beiden zu wissen.

Antwort

4

Die Sache ist, wenn Sie einen String Parameter dieses String bieten kann ein regulärer Ausdruck sein. Und | ist ein Sonderzeichen in der Welt der regulären Ausdrücke.

Dieses klarer zu Ihnen nach folgenden Beispiel werden wird,

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

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

Wenn Sie das gewünschte Ergebnis erhalten möchten, müssen Sie | mit \\

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

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

Im Falle einer Zeichenfolge muss es entweichen. verwenden "\\|" statt "|"

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

ein paar mehr Möglichkeiten, entkommen zu Es folgt ein Regex:

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) 

Beachten Sie, dass Variabel Les sind in raw Strings interpoliert, so muss man vorsichtig sein mit $.

\Q ist besonders nützlich, wenn Sie mehrere Zeichen haben und nicht vor jedem einen Backslash setzen möchten.

Verwandte Themen