2013-04-09 205 views
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 
.... 

斯卡拉2.10预期的结果:

hello, I have 65 $ 

问题是与符号$ ,我需要将其作为字符串处理,而不是正则表达式。我试图把它变成""",或raw""但没有任何帮助

回答

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 $ 
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