2017-12-25 31 views
0

Sagen wir, dass ich eine Zeichenfolge habe: "\\ u2026". Und ich möchte, dass es das ändert, um "den Unicode in Scala auszudrucken". Gibt es eine Möglichkeit, das zu tun? Vielen Dank für Ihre Zeit.Convert \ in in Scala

Bearbeiten: Lassen Sie mich klären. Aufgrund einiger Umstände habe ich eine Zeichenfolge wie: "char Es folgt in Unicode: \\ u2026", das druckt:

Folgende Zeichen in Unicode ist: \ u2026

Aber, ich möchte bearbeiten es so, dass es druckt:

nach char ist in Unicode: ...

Dank für die Antworten danken. Das ist, was ich getan habe.

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

Möchten Sie nur einen doppelten Backslash entfernen? –

Antwort

2

Wenn Sie wissen, dass die Zeichenfolge genau \uXXXX ist (unescaped), dann

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)) // "…" 

(Code angepasst von Creating Unicode character from its number). Wenn nicht, wählen Sie den gewünschten Teil mit dem regulären Ausdruck """\\u(\d{4})""".

1

Kurze Antwort auf die Frage, wie die String.replace Methode verwenden gestellt:

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

Beachten Sie, dass ich jeden Backslash verdoppeln musste, weil der umgekehrten Schrägstrich beginnt auch Java String Escape-Sequenzen.

Wenn Sie die JVM wollen UTF-8 IO (nicht für diese Frage erforderlich) durchführen, stellen Sie die Java-Systemeigenschaft file.encoding=UTF-8, wie folgt aus:

$ 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 

Hier finden Sie Informationen Bonus von https://stackoverflow.com/a/16034658/553865 angepasst (bezogen Alexey Romanov Antwort):

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 = …