2016-09-04 3 views
0

나는 파이프문자를 스칼라로 분할하고 있습니다. 이 작업을 수행하는 데는 두 가지 옵션이 있습니다. 나는 다른 시나리오에서 두 가지 다른 결과를 얻는 것을보고 놀랐습니다.문자와 문자열을 스칼라로 나누는 것의 차이점

확인이 아웃이 예상대로 문자의 경우는 결과를 반환하면서

enter image description here

문자열의 경우, 그것은 또한 파이프 문자 반환.

나는이 두 가지의 차이점을 알고 싶어합니다.

답변

4

. 그리고 |은 정규 표현식의 세계에서 특수 문자입니다. 당신이 원하는 결과를 얻고 싶은 경우에

이 다음 예제 후 당신에게 더 명확해질 것이다

,

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

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

당신의 \\

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

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

문자열의 경우 이스케이프 처리해야합니다. 사용 "\\|" 대신 "|" 정규 표현식이 될 수 String 매개 변수이 String를 제공하는 경우 것입니다

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

몇 가지 방법을 사용하여 |을 탈출해야합니다 정규식 이스케이프 처리 :

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) 

Variab les은 raw 문자열로 보간되므로 $과 조심해야합니다.

\Q은 여러 문자를 이스케이프 처리하고 각 문자 앞에 백 슬래시를 넣지 않으려 고 할 때 특히 유용합니다.

관련 문제