Замена одного '\' на '\\' в Java

Как заменить один '\' на '\\'? Когда я запускаю 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);
    }
}

Ответ 1

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\Мои документы\Мои палитры
C:\\Documents and Settings\\HUSAIN\\Мои документы\\Мои палитры

Ответ 2

\ также является специальным символом в regexp. Вот почему вы должны сделать что-то вроде этого:

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

Ответ 3

Вы должны сначала scape \ для строки, а затем scape для регулярного выражения, это будет \\\\ для каждой косой черты.

Ответ 4

В строковом литерале \ должен быть экранирован с другим \. А в регах a \ также должен быть экранирован другим \\. Таким образом, вы должны избегать каждого \ четыре раза: \\\\.

Другой способ - использовать Pattern.quote("\\") (для регулярного выражения) и Matcher.quoteReplacement("\\\\") для строки замены.

Ответ 5

Вы можете использовать Pattern.quote, чтобы упростить вам удаление значения, например:

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

или вы можете просто использовать String.replace:

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

Смотрите: Pattern.quote, String.replace и Matcher.quoteReplacement

Ответ 6

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

Это прекрасно работало. filePath = C:\abc\