13

如何用 替换'\'单个'\\'?当我运行时replaceAll(),我收到此错误消息。

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

我的代码:

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

6 回答 6

23

String.replaceAll(String,String) 是正则表达式。
String.replace(String,String) 会做你想做的。

以下...

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

生产...

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

于 2013-01-06T14:54:02.123 回答
13

\也是正则表达式中的特殊字符。这就是为什么你应该这样做:

    str = str.replaceAll("\\\\", "\\\\\\\\");
于 2013-01-06T14:52:24.983 回答
5

您必须首先\为字符串转义,然后为正则表达式转义,这将是\\\\每个斜杠。

于 2013-01-06T14:52:50.460 回答
2

在 String 文字中,\必须用另一个\. 而在一个reges中,a\也必须被另一个转义\\。所以,你必须每\四次逃跑一次:\\\\.

另一种方法是使用Pattern.quote("\\")(用于正则表达式)和Matcher.quoteReplacement("\\\\")替换字符串。

于 2013-01-06T14:55:13.137 回答
2

您可以使用Pattern.quote它来让您更轻松地转义该值,例如:

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

或者,您可以使用String.replace

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

请参阅:Pattern.quoteString.replaceMatcher.quoteReplacement

于 2013-01-06T14:55:37.660 回答
0
filePath = filePath.replaceAll(Matcher.quoteReplacement("\\"), Matcher.quoteReplacement("\\\\"));

这个工作完美。

OUTPUT:
filePath = C:\abc\
于 2016-11-14T22:42:49.177 回答