Diese Frage ist ein bisschen alt, aber ich stolperte über sie, während für eine Lösung selbst suchen und war mit den anderen Antworten unzufrieden, weil sie entweder nicht sicher sind (sie selbst ersetzen) oder eine externe Bibliothek benötigen.
Ich habe einen Weg gefunden, um die Escape-Darstellung einer Zeichenfolge mit der Scala-Standardbibliothek (> 2.10.0) zu bekommen, die sicher ist. Es verwendet einen kleinen Trick:
Durch Laufzeit-Reflektion können Sie leicht eine Darstellung eines literalen String-Ausdrucks erhalten. Der Baum eines solchen Ausdrucks wird beim Aufruf seiner Methode toString
als (fast) Scala-Code zurückgegeben. Dies bedeutet insbesondere, dass das Literal so dargestellt wird, wie es im Code wäre, d. H. Maskiert und doppelt zitiert.
def escape(raw: String): String = {
import scala.reflect.runtime.universe._
Literal(Constant(raw)).toString
}
Die escape
Funktion ergibt sich somit in der gewünschten Code-Darstellung der rohen Saite (einschließlich der umgebenden doppelte Anführungszeichen):
scala> "\bHallo" + '\n' + "\tWelt"
res1: String =
?Hallo
Welt
scala> escape("\bHallo" + '\n' + "\tWelt")
res2: String = "\bHallo\n\tWelt"
Diese Lösung zwar die Reflexion api aber IMHO mißbraucht noch sicherer und wartbarer als die anderen vorgeschlagenen Lösungen.
Wissen Sie, wie man mit Reflektion unescape verwendet? – Renkai
@Renkai Sie brauchen keine Reflexion dafür. Sie können StringContext verwenden: 'StringContext.treatEscapes (res2)'. Verlässt die Anführungszeichen jedoch –
? StringContext.treatEscapes' tut das Gegenteil: es wandelt "\\ t" in "\ t" um. –