【问题标题】:Replace all invalid escape characters替换所有无效的转义字符
【发布时间】:2014-07-01 21:13:56
【问题描述】:

scala StringContext 存在无效转义字符的问题。示例:

s"""v \C/R\ni"""

引发“scala.StringContext$InvalidEscapeException:索引 2 处的无效转义字符”。 http://www.scala-lang.org/api/current/index.html#scala.StringContext$$InvalidEscapeException

有没有一种优雅而通用的方法来避免这个问题?特别是应该保留 valid 转义字符。可能是:

s"""v \\C/R\ni"""

仅供参考:我会将此类字符串通过管道传输到 scala 解释器中,因此可以准备字符串。

在紧要关头用 \* 替换 * 但不是来自 chapter 1.3.6 的替换。 有什么聪明的主意吗?

(我使用的是 scala 2.11.x)

【问题讨论】:

  • 我想说“使用正则表达式”,但我还没有找到这样做的确切字符序列;但在我看来,这是要走的路,匹配每个有效的转义字符,并替换每个无效的...

标签: scala


【解决方案1】:

我目前的解决方案:

val regex = "\\\\[^btnfr\"]".r
var str = """hi \C ho \t jo \n \" mu \M"""
val matches = regex.findAllIn(str).toList
val chars = matches.map(_(1))
for ( (x,y) <- matches zip chars) str = str.replace(x, "\\\\" + y)

输出是 """hi \C ho \t jo \n \" mu \M"""。 不是很优雅,但它有效。也许有人有更好、更“实用”的解决方案?

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2013-09-24
    相关资源
    最近更新 更多