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);
}
}
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
\
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. filePath = C:\abc\