2011-12-13 56 views
19

我有一個字符串,當我嘗試運行replaceAll方法,我得到這個奇怪的錯誤:Java String ReplaceAll方法提供非法重複錯誤?

String str = "something { } , op"; 
str = str.replaceAll("o", "\n"); // it works fine 
str = str.replaceAll("{", "\n"); // does not work 

,我也得到一個奇怪的錯誤:

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Illegal repetition { 

我怎樣才能更換髮生的"{"

回答

32

A {是用於範圍重複的正則表達式元字符,如{min,max}。要匹配文字{你需要用\\它前面逃脫它:

str = str.replaceAll("\\{", "\n"); // does work 
+0

也許更改評論:) –

+0

@KublaiKhan::) – codaddict

+0

@codaddict,謝謝 – Johnydep

5

退出:

str = str.replaceAll("\\{", "\n"); 

這是必要的,因爲第一個參數replaceAll()regular expression,並且{在Java正則表達式有特殊的含義(這是一個重複運營商,因此該錯誤消息) 。

+0

非常感謝你 – Johnydep

11

如果你真的打算更換單個字符,而不是正則表達式(這是你彷彿想在這裏做),你應該使用.replace(),而不是.replaceAll()。儘管它的名字,.replace()將取代所有的事件,不只是第一個。

如果您想知道,String執行CharSequence,所以.replace("{", "\n")將工作。

+0

是的,我知道,但我想要替換所有發生 – Johnydep

+1

就像我說的,'.replace()* *將*替換所有的事件,儘管它的名字! – fge