2013-01-06 29 views
10

'\''u '\\' ile nasıl değiştirebilirim? replaceAll() çalıştırdığımda, bu hata iletisini alıyorum.Java 'da' \ 'ile tekli \' değiştirme

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 

Kodum:

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

str = str.replaceAll ("\\", "\\\\") 'yerine' str = str.replaceAll ("^ \\ $", ") ile değiştirmeyi deneyin^\\\\ $ "); ' – Billie

+0

Tek '\' yerine '\' ile ne demek istiyorsunuz? Bir noop gibi görünüyor. –

+0

olası bir kopyası [String.replaceAll ile Backslash problemi] (http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – jlordo

cevap

18

String.replaceAll(String,String), regex biçimindedir.
String.replace(String,String) ne istersen yapacak.

aşağıdaki ...

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

üretir ...

C: \ Documents and Settings \ HUSAIN \ Belgelerim Paletler
C \: \\ Documents and Settings \ \ HUSAIN \\ Belgelerim Paletler

9

\ da regexp özel bir karakterdir.

Önce dizesi \ scape ve sonra regex için scape zorunda
str = str.replaceAll("\\\\", "\\\\\\\\"); 
4

, her eğik çizgi için \\\\ olacaktır: Eğer böyle bir şey yapmak gerekir nedeni budur.

1

bir dize olarak \\, \ başkaöncelenmelidir. Ve bir rehinede, bir \ da başka bir \\ tarafından atlanmalıdır. Yani, her bir \ dört kez kaçmak gerekir: \\\\.

Başka bir yol, Pattern.quote("\\") (normal ifade için) ve yedek dize için Matcher.quoteReplacement("\\\\") kullanmaktır. Eğer gibi değer, kaçmak için

0

Bunu kolaylaştırmak için Pattern.quote kullanabilirsiniz:

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

ya, sadece String.replace kullanabilirsiniz:

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

Bkz: Pattern.quote, String.replace ve Matcher.quoteReplacement

0

filePath = filePath.replaceAll (Matcher.quoteReplacement ("\"), Matcher.quoteReplacement ("\\ ")); Bu, mükemmel bir şekilde çalışmıştır. filePath = C: \ abc \

İlgili konular