2014-07-01 2 views
1

scala StringContext는 invlaid 이스케이프 문자에 문제가 있습니다. 예 :유효하지 않은 모든 이스케이프 문자 바꾸기

s"""v \C/R\ni""" 

"scala.StringContext $ InvalidEscapeException : 인덱스 2에서 유효하지 않은 이스케이프 문자"를 발생시킵니다. http://www.scala-lang.org/api/current/index.html#scala.StringContext $$ InvalidEscapeException

이 문제를 방지하려면 우아하고 보편적 인 방법이 있습니까? 특히 유효한 이스케이프 문자를 보존해야합니다. 가능한 값은 다음과 같습니다.

s"""v \\C/R\ni""" 

정보 용 : 문자열을 스칼라 인터프리터로 파이프 처리하여 문자열을 준비 할 수 있습니다.

핀치는 \ *로 바꾸지 만, chapter 1.3.6의 것을 바꾸지는 않습니다. 영리한 아이디어가 있습니까? (I 스칼라 2.11.x 사용하고)

+0

"정규식 사용 "이라고 말하고 싶지만 그렇게하려면 정확한 문자 시퀀스를 찾지 못했습니다. 아직,하지만 그건 내가 가고, 모든 유효한 이스케이프 문자와 일치하고, 모든 무효 한 것을 대체하는 방법 인 것처럼 보인다. –

답변

0

순간 내 용액 :

val regex = "\\\\[^btnfr\"]".r 
var str = """hi \C ho \t jo \n \" mu \M""" 
val matches = regex.findAllIn(str).toList 
val chars = matches.map(_(1)) 
for ((x,y) <- matches zip chars) str = str.replace(x, "\\\\" + y) 

출력 인 "" "C HO \ 안녕하세요 \ t 지성 \ n \"MU \ M "" ". 우아하지는 않지만 작동합니다. 더 나은"기능적 "솔루션을 가지고있는 사람이 있습니까?

관련 문제