加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala:如何获得字符串的转义表示?

发布时间:2020-12-16 09:41:40 所属栏目:安全 来源:网络整理
导读:基本上,我想做的是: // in foo.scala val string = "this is a stringnover two lines" println(string) println(foo(string)) 做这个: % scala foo.scalathis is a stringover two lines"this is a stringnover two lines" 基本上寻找一个模仿ruby的St
基本上,我想做的是:

// in foo.scala
 val string = "this is a stringnover two lines"
 println(string)
 println(foo(string))

做这个:

% scala foo.scala
this is a string
over two lines
"this is a stringnover two lines"

基本上寻找一个模仿ruby的String#inspect或haskell的show :: String – >串。

解决方法

这个问题有点老了,但是我自己搜索一个解决方案时却偶然发现,并且对其他答案不满意,因为它们不安全(替换自己的东西)或者需要一个外部库。

我找到了一种方法来获得一个安全的scala标准库(> 2.10.0)的字符串的转义表示。它使用一个小技巧:

通过运行时反射,您可以轻松获取文字字符串表达式的表示。这种表达式的树在调用它的toString方法时返回为(几乎)scala代码。这尤其意味着文字以代码的方式表示,即转义和双引号。

def escape(raw: String): String = {
  import scala.reflect.runtime.universe._
  Literal(Constant(raw)).toString
}

因此,转义函数会导致所提供的原始字符串(包括周围的双引号)所需的代码表示:

scala> "bHallo" + 'n' + "tWelt"
res1: String =
?Hallo
        Welt

scala> escape("bHallo" + 'n' + "tWelt")
res2: String = "bHallontWelt"

这个解决方案肯定是滥用反思api,但是IMHO比其他提出的解决方案更安全和更易于维护。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读