Java 如何在scala中取消转义字符串?
我发现很多关于转义字符串的帖子,但没有关于反转义字符串的帖子 使用Scala Play,我的控制器接受JSON作为请求。我通过以下方式从中提取字符串: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
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实体的跳过,而不是反斜杠取消跳过。