scala字符串,原始字符串

时间:2013-04-09 09:46:56

标签: string scala replace

是否可以这样做:

"hello, I have 65 dollars".replaceFirst("65", "$")

目前的结果是

 scala> "hello, I have 65 dollars".replaceFirst("dollars", "$")
 java.lang.StringIndexOutOfBoundsException: String index out of range: 1
 ....

scala 2.10中的预期结果:

 hello, I have 65 $

问题在于符号$,我需要将其作为字符串而不是正则表达式处理。我尝试将其放入"""raw"",但没有任何帮助

2 个答案:

答案 0 :(得分:5)

你可以双重逃避美元符号:

"hello, I have 65 dollars".replaceFirst("dollars", "\\$")

或使用Scala三重引号和单一转义。

"hello, I have 65 dollars".replaceFirst("dollars", """\$""")

无论哪种方式,您都需要使用等于“\ $”的字符串文字,以反斜杠来逃避美元。

修改

我不确定你想要“65美元” - 不是“65美元”更好的格式?为此,您需要一个捕获组和一个反向引用

"hello, I have 65 dollars".replaceFirst("""(\d++)\s++dollars""","""\$$1""");

输出:

res3: java.lang.String = hello, I have $65

答案 1 :(得分:2)

首先,你必须逃避美元字符,因为现在它被视为正则表达式(end-of-the-string sign)的一部分:

"hello, I have 65 dollars".replaceFirst("65", "\\$")
res0: String = hello, I have $ dollars

你更有可能想要取代“美元”这个词:

scala> "hello, I have 65 dollars".replaceFirst("dollars", "\\$")
res1: String = hello, I have 65 $