我发现很多关于逃避字符串的帖子,但没有关于撤消字符串的帖子。
使用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解决方案也是可能的。
答案 0 :(得分:15)
有interpolations允许您将字符串转换为格式化和/或转义序列。像s"..."
或f"..."
这样的插值在StringContext处理。
它还提供反向功能:
val es = """Hello\tworld\nmy name is \"ABC\""""
val un = StringContext treatEscapes es
答案 1 :(得分:2)
这不是一般的unescaping字符串的答案,而是专门用于处理text match {
case JsString(value) => value
case _ => // what do you want to do for other cases?
}
:
def unescapeJson(s: String) = JSON.parse('"' + s + '"') match {
case JsString(value) => value
case _ => ??? // can't happen
}
您可以通过以下方式实现unescape:
<?php
$args = array( 'post_type' => 'product', 'stock' => 1, 'posts_per_page' => 9, 'orderby' =>'date','orderby' => 'rand' );
$loop = new WP_Query( $args );
while ($loop->have_posts()) : $loop->the_post();
echo get_the_post_thumbnail($loop->post->ID, 'shop_catalog');
endwhile;
?>
或使用来自Apache Commons Lang的StringEscapeUtils
(尽管这是一个相当大的依赖)。
答案 2 :(得分:1)
您应该使用scala标准库中的unescape方法。 以下是文档的link,您将在“Value Members”部分的末尾找到该方法。