Replacing single '\' with '\\' in

2019-01-20 08:14发布

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

6条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-01-20 09:00

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

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

查看更多
该账号已被封号
3楼-- · 2019-01-20 09:07

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.

查看更多
Rolldiameter
4楼-- · 2019-01-20 09:11

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

查看更多
啃猪蹄的小仙女
5楼-- · 2019-01-20 09:12

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

    str = str.replaceAll("\\\\", "\\\\\\\\");
查看更多
爷、活的狠高调
6楼-- · 2019-01-20 09:14

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

查看更多
相关推荐>>
7楼-- · 2019-01-20 09:15

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

查看更多
登录 后发表回答