Java 如何在scala中取消转义字符串?

Java 如何在scala中取消转义字符串?,java,json,scala,escaping,Java,Json,Scala,Escaping,我发现很多关于转义字符串的帖子,但没有关于反转义字符串的帖子 使用Scala Play,我的控制器接受JSON作为请求。我通过以下方式从中提取字符串: val text: play.api.libs.json.JsValue = request.body.\("source") 如果我打印text.toString我会得到例如 "Hello\tworld\nmy name is \"ABC\"" 如何将转义文本转换为普通文本?结果应该是这样的 Hello world my name i

我发现很多关于转义字符串的帖子,但没有关于反转义字符串的帖子

使用Scala Play,我的控制器接受JSON作为请求。我通过以下方式从中提取字符串:

val text: play.api.libs.json.JsValue = request.body.\("source")
如果我打印
text.toString
我会得到例如

"Hello\tworld\nmy name is \"ABC\""
如何将转义文本转换为普通文本?结果应该是这样的

Hello    world
my name is "ABC"
到目前为止,我尝试了如下方法:

replaceAll("""\\t""", "\t")

但是,创建所有可能的转义规则可能过于复杂。所以我的问题是:如何轻松做到这一点?可能使用标准库。Java解决方案也是可能的。

您应该使用scala标准库中的unescape方法。
以下是您将在“Value Members”部分末尾找到的方法的文档摘要。

这不是一般意义上的不可回避字符串的答案,而是专门用于处理
JsValue

text match { 
  case JsString(value) => value
  case _ => // what do you want to do for other cases?
}
您可以通过以下方式实现unescape:

def unescapeJson(s: String) = JSON.parse('"' + s + '"') match {
  case JsString(value) => value
  case _ => ??? // can't happen
}
或者使用ApacheCommonsLang(尽管这是一个相当大的依赖项)。

有一些函数允许您将字符串转换为格式化和/或转义序列。这些插值,如
s“…”
f“…”
在中处理

它还提供反向功能:

val es = """Hello\tworld\nmy name is \"ABC\""""
val un = StringContext treatEscapes es

请解释投票结果。这个方法提供了要求的结果。我没有投你反对票,相反,我把你的帖子标记为答案并投了赞成票。它的工作原理与所描述的完全相同。谢谢你,我实际上是指没有留下任何评论的落选者。我很高兴能帮助你。我不是下选者,但可能的原因是Scala字符串转义序列不同于JSON序列。这可能只是注释,无论如何,好的一点,谢谢:)其他答案只处理Scala转义序列,与JSON转义序列不同(
\/
在JSON中有效,但在Scala中无效,反之亦然)。@petrbel我实际上又添加了两个选项:)这个选项来自
Scala.xml
,用于取消HTML实体的跳过,而不是反斜杠取消跳过。