Esta pregunta es un poco viejo, pero tropecé con él durante la búsqueda de una solución a mí mismo y estaba insatisfecho con las otras respuestas porque no son seguras (reemplazando cosas por su cuenta) o requieren una biblioteca externa.
Encontré una forma de obtener la representación escapada de una cadena con la biblioteca estándar scala (> 2.10.0) que es segura. Utiliza un pequeño truco:
A través de la reflexión en tiempo de ejecución puede obtener fácilmente una representación de una expresión de cadena literal. El árbol de dicha expresión se devuelve como (casi) código scala al llamar al método toString
. Esto significa especialmente que el literal se representa de la forma en que sería en código, es decir, escapado y comillas dobles.
def escape(raw: String): String = {
import scala.reflect.runtime.universe._
Literal(Constant(raw)).toString
}
Por tanto, la función de escape
se traduce en el código de representación deseada de la cadena de texto proporcionado (incluyendo las comillas dobles que rodean):
scala> "\bHallo" + '\n' + "\tWelt"
res1: String =
?Hallo
Welt
scala> escape("\bHallo" + '\n' + "\tWelt")
res2: String = "\bHallo\n\tWelt"
Esta solución está abusando cierto que el API de reflexión, pero en mi humilde opinión aún más seguro y más sostenible que las otras soluciones propuestas.
¿Sabes cómo separar el uso con la reflexión? – Renkai
@Renkai no necesita reflexión para esto. Puede usar StringContext: 'StringContext.treatEscapes (res2)'. Deja las comillas dobles aunque –
'StringContext.treatEscapes' hace lo contrario: convierte" \\ t "en" \ t ". –