Replacing single '\\' with '\\\\'

2019-01-20 09:07发布

问题:

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);
    }
}

回答1:

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



回答2:

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

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


回答3:

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



回答4:

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.



回答5:

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



回答6:

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

This one worked perfectly. filePath = C:\abc\