2013-04-09 119 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