Question

How do I replace a single '\' with '\\'? When I run replaceAll() then I get this error message.

Exception in thread "main" java.util.regex.PatternSyntaxException:
                           Unexpected internal error near index 1 \
                                                                  ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.compile(Pattern.java:1466)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at java.lang.String.replaceAll(String.java:2190)
    at NewClass.main(NewClass.java:13)
Java Result: 1

My code:

public class NewClass {
    public static void main(String[] args) {
        String str = "C:\\Documents and Settings\\HUSAIN\\My Documents\\My Palettes";
        str = str.replaceAll("\\", "\\\\");
        System.out.println(str);
    }
}
Was it helpful?

Solution

String.replaceAll(String,String) is regex.
String.replace(String,String) will do what you want.

The following...

String str = "C:\\Documents and Settings\\HUSAIN\\My Documents\\My Palettes";
System.out.println(str);
str = str.replace("\\", "\\\\");
System.out.println(str);

Produces...

C:\Documents and Settings\HUSAIN\My Documents\My Palettes
C:\\Documents and Settings\\HUSAIN\\My Documents\\My Palettes

OTHER TIPS

\ is also a special character in regexp. This is why you should do something like this:

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

You have to first scape the \ for the string and then scape it for the regex, it would be \\\\ for each slash.

In a String literal, \ must be escaped with another \. And in a reges, a \ must also be escaped by another \\. So, you must escape every \ four times: \\\\.

Another way is to use Pattern.quote("\\") (for the regex) and Matcher.quoteReplacement("\\\\") for the replacement string.

You could use Pattern.quote to make it easier for you to escape the value, such as:

str = str.replaceAll(Pattern.quote("\\"), Matcher.quoteReplacement("\\\\"));

or, you can just use String.replace:

str = str.replace("\\", "\\\\");

See: Pattern.quote, String.replace and Matcher.quoteReplacement

filePath = filePath.replaceAll(Matcher.quoteReplacement("\\"), Matcher.quoteReplacement("\\\\"));

This one worked perfectly.

OUTPUT:
filePath = C:\abc\
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top