在Scala的解析器组合器中(特别是JavaTokensParser
),有一个与类似Java的字符串匹配的定义stringLiteral
。有没有办法将stringLiteral
转换为String
?例如,如果我解析"Run \" run \\ run"
,我想将输入的字符串文字转换为Run " run \ run
。
另外,是否有stringLiterals的定义也支持"""
?
答案 0 :(得分:0)
我有一个预感,你问的是一个更复杂的问题,但是如果简单的答案是编写你自己的解析器并在涂药器后修剪引号,^^。
在REPL中你可以测试它:
import scala.util.parsing.combinator.JavaTokenParsers
object testParsers extends JavaTokenParsers {
val aString : Parser[String] = stringLiteral ^^ {
case s => s.substring( 1, s.length-1 )
}
}
testParsers.parseAll(testParsers.stringLiteral,""""Run \" run \\ run"""")
testParsers.parseAll(testParsers.aString,""""Run \" run \\ run"""")
我不知道任何内置的三引号解析器,所以我猜你必须自己动手。
答案 1 :(得分:0)
Apache Commons提供了一种有用的方法:StringEscapeUtils.escapeJava。