Husain Sanwerwala
Husain Sanwerwala

Reputation: 489

Replacing single '\' with '\\' in Java

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

Upvotes: 14

Views: 20707

Answers (6)

Manish Giri
Manish Giri

Reputation: 1

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

This one worked perfectly.

OUTPUT:
filePath = C:\abc\

Upvotes: 0

Mike
Mike

Reputation: 2434

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

Upvotes: 24

Tom Leese
Tom Leese

Reputation: 19699

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

Upvotes: 2

JB Nizet
JB Nizet

Reputation: 691715

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.

Upvotes: 2

Javier Diaz
Javier Diaz

Reputation: 1830

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

Upvotes: 5

Adam Sznajder
Adam Sznajder

Reputation: 9206

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

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

Upvotes: 14

Related Questions