String.replaceAll single backslashes with double backslashes

Frank Groeneveld picture Frank Groeneveld · Nov 9, 2009 · Viewed 152.3k times · Source

I'm trying to convert the String \something\ into the String \\something\\ using replaceAll, but I keep getting all kinds of errors. I thought this was the solution:

theString.replaceAll("\\", "\\\\");

But this gives the below exception:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

Answer

BalusC picture BalusC · Nov 9, 2009

The String#replaceAll() interprets the argument as a regular expression. The \ is an escape character in both String and regex. You need to double-escape it for regex:

string.replaceAll("\\\\", "\\\\\\\\");

But you don't necessarily need regex for this, simply because you want an exact character-by-character replacement and you don't need patterns here. So String#replace() should suffice:

string.replace("\\", "\\\\");

Update: as per the comments, you appear to want to use the string in JavaScript context. You'd perhaps better use StringEscapeUtils#escapeEcmaScript() instead to cover more characters.