简体   繁体   中英

Java String ReplaceAll method giving illegal repetition error?

I have a string and when I try to run the replaceAll method, I am getting this strange error:

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

and i get a strange error:

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

How can I replace the occurrences of "{" ?

A { is a regex meta-character used for range repetitions as {min,max} . To match a literal { you need to escape it by preceding it with a \\\\ :

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

If you really intend to replace single characters and not regexes (which is what you seem to want to do here), you should use .replace() , not .replaceAll() . In spite of its name, .replace() will replace ALL occurrences, not just the first one.

And in case you wonder, String implements CharSequence , so .replace("{", "\\n") will work.

Escape it:

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

This is needed since the first argument to replaceAll() is a regular expression , and { has a special meaning in Java regular expressions (it's a repetition operator, hence the error message).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM