Frank Groeneveld Frank Groeneveld - 1 month ago 13
Java Question

String.replaceAll single backslashes with double backslashes

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

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.