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比其他提出的解决方案更安全和更易于维护。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |