2011-12-13 60 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