是否可以这样做:
"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""
,但没有任何帮助
答案 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 $