1

是否可以这样做:

"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""没有任何帮助

4

2 回答 2

6

您可以双重转义美元符号:

"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
于 2013-04-09T09:51:12.407 回答
2

首先,您必须转义美元字符,因为现在它被视为正则表达式(字符串结尾符号)的一部分:

"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 $
于 2013-04-09T09:50:00.490 回答