2017-12-25 18 views
0

문자열이 있다고 가정 해 봅시다. "\\ u2026". 그리고 그것을 스칼라에서 유니 코드를 출력하기 위해 "\ u2026"으로 바꾸고 싶습니다. 그렇게 할 수있는 방법이 있습니까? 시간 내 주셔서 감사합니다.스칼라에서 \ to 로 변환

편집 : 내가 명확하게 설명해주세요. 어떤 상황으로 인해, 나는 같은 문자열을 가지고, 인쇄 :

다음 문자는 유니 코드에 있습니다 : "\\ U2026 문자에 이어 유니 코드에"\ U2026

, 나는 편집 할 그것은이 인쇄되도록 :

다음 문자는 유니 코드에 있습니다 ...

이 답변 주셔서 감사합니다. 이것이 제가 끝내 준 것입니다. String.replace 방법을 사용하도록 요청으로 질문에

def FixString(string: String) : String = { 
    var newString = string; 
    // Find the 1st problematic string 
    var start = string.indexOf("\\u"); 
    while(start != -1) { 
    // Extract the problematic string 
    val end = start + 6; 
    val wrongString = string.substring(start,end); 
    // Convert to unicode 
    val hexCode = wrongString.substring(2); 
    val intCode = Integer.parseInt(hexCode, 16); 
    val finalString = new String(Character.toChars(intCode)); 
    // Replace 
    newString = string.replace(wrongString,finalString); 
    // Find next problematic string 
    start = string.indexOf("\\u", end); 
    } 
    return newString; 
} 
+0

이중 백 슬래시를 제거 하시겠습니까? –

답변

2

당신은 문자열이 다음 (이스케이프) 정확히

val stringWithBackslash = "\\u2026" // just for example 
val hexCode = stringWithBackslash.substring(2) // "2026" 
val intCode = Integer.parseInt(hexCode, 16) // 8230 
val finalString = new String(Character.toChars(intCode)) // "…" 
01 \uXXXX 알고있는 경우

(코드는 Creating Unicode character from its number에서 변경). 그렇지 않다면 정규 표현식 """\\u(\d{4})"""으로 원하는 부분을 선택하십시오.

1

짧은 답변 : 내가 백 슬래시 문자는 자바 문자열 이스케이프 시퀀스를 시작하기 때문에 각 백 슬래시를 두 배로했다

"\\u2026".replace("\\\\", "\\") 

알 수 있습니다. 여기

$ sbt console 
Welcome to Scala 2.12.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151). 
Type in expressions for evaluation. Or try :help. 

scala> System.setProperty("file.encoding","UTF-8") 
res0: String = UTF-8 

scala> val strWithError: String = "\\u2026" 
strWithError: String = \u2026 

scala> val prefixedString: String = strWithError.replace("\\\\", "\\") // corrected string as per OP 
prefixedString: String = \u2026 

https://stackoverflow.com/a/16034658/553865에서 적응 보너스 정보입니다 (참조 : 당신은 JVM 수행 할 경우

는 UTF-8 IO (이 질문에 필요하지 않음),이 같은 Java 시스템 등록 정보 file.encoding=UTF-8을 설정) 알렉세이 로마노프의 대답에 의하여 :

scala> val utfString: String = strWithError.replace("\\u", "") // utf code point 
utfString: String = 2026 

scala> val intCode = Integer.parseInt(utfString, 16) 
intCode: Int = 8230 

scala> val symbol = new String(Character.toChars(intCode)) 
symbol: String = …