如何替换"with".
以下是我的尝试:
def main(args:Array[String]) = {
val line:String = "replace \" quote";
println(line);
val updatedLine = line.replaceAll("\"" , "\\\"");
println(updatedLine);
}
Run Code Online (Sandbox Code Playgroud)
输出:
replace " quote
replace " quote
Run Code Online (Sandbox Code Playgroud)
输出应该是:
replace " quote
replace \" quote
Run Code Online (Sandbox Code Playgroud)
小智 13
使用StringOps类的"replaceAllLiterally"方法.这将替换参数的所有字面值:
scala> val line:String = "replace \" quote"
line: String = replace " quote
scala> line.replaceAllLiterally("\"", "\\\"")
res8: String = replace \" quote
Run Code Online (Sandbox Code Playgroud)
还有两个\\工作:
scala> line.replaceAll("\"" , "\\\\\"");
res5: java.lang.String = replace \" quote
Run Code Online (Sandbox Code Playgroud)
这里的问题是有两个'层'逃脱字符串.第一层是编译器,我们可以在REPL中轻松看到:
scala> "\""
res0: java.lang.String = "
scala> "\\"
res1: java.lang.String = \
scala> "\\\""
res2: java.lang.String = \"
scala> val line:String = "replace \" quote";
line: String = replace " quote
Run Code Online (Sandbox Code Playgroud)
第二层是正则表达式解释器.这个更难看,但可以通过应用你的例子看到:
scala> line.replaceAll("\"" , "\\\"");
res5: java.lang.String = replace " quote
Run Code Online (Sandbox Code Playgroud)
什么reg.进出口.解释器真的收到的是","这只被解释为".所以,我们需要reg.进出口.接收\\".为了让编译器给我们\我们需要写\\.
让我们看看unescaping:
尽管非常直接,但它可能有点令人困惑.
正如@sschaef指出的那样,使用""三重引号的另一种选择,这种形式的字符串不会被编译器取消:
scala> line.replaceAll("\"" , """\\"""");
res6: java.lang.String = replace \" quote
Run Code Online (Sandbox Code Playgroud)