如何在scala中撤消字符串?

时间:2015-04-29 06:33:38

标签: 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 is "ABC"

到目前为止,我已经尝试了类似的方法:

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

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

3 个答案:

答案 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”部分的末尾找到该方法。