The problem is actually that you need to double-escape backslashes in the replacement string. You see, "\\/"
(as I’m sure you know) means the replacement string is \/
, and (as you probably don’t know) the replacement string \/
actually just inserts /
, because Java is weird, and gives \
a special meaning in the replacement string. (It’s supposedly so that \$
will be a literal dollar sign, but I think the real reason is that they wanted to mess with people. Other languages don’t do it this way.) So you have to write either:
"Hello/You/There".replaceAll("https://stackoverflow.com/", "\\\\/");
or:
"Hello/You/There".replaceAll("https://stackoverflow.com/", Matcher.quoteReplacement("\\/"));
(Using java.util.regex.Matcher.quoteReplacement(String)
.)