Замена одного '\' на '\\' в 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\