2013-01-06 17 views
10

'\''\\'に置き換えるにはどうすればよいですか? replaceAll()を実行すると、このエラーメッセージが表示されます。Javaで '\'を '\'に置き換える

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

「str = str.replaceAll( "\\"、 "\\\\") 'を' str = str.replaceAll( "^ \\ $"、 "^\\\\ $ "); ' – Billie

+0

あなたは、 '\'を '\'で置き換えるという意味ですか?いいえのように聞こえる。 –

+0

[[バックスラッシュの問題(String.replaceAll)]の可能な複製(http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – jlordo

答えて

18

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とSettings \フサイン\マイドキュメント
Cマイパレットを\:\\ DocumentsとSettings \ \ HUSAIN \\ My Documents \\ My Palettes

9

\も、正規表現での特殊文字です。

あなたが最初の文字列の \をスケープ、その後、正規表現のためにそれをスケープする必要が
str = str.replaceAll("\\\\", "\\\\\\\\"); 
4

が、それは各スラッシュのため\\\\次のようになります。あなたはこのような何かをしなければならない理由はここにあります。

1

文字列リテラルでは、\を別のでエスケープする必要があります。また、レギュでは\も別の\\でエスケープする必要があります。だから、\毎に\\\\の4回エスケープする必要があります。

もう1つの方法は、置換文字列にPattern.quote("\\")(正規表現用)とMatcher.quoteReplacement("\\\\")を使用することです。

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

か、あなただけのString.replaceを使用することができます:

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

参照:

0

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

これは完全に機能しました。 file = C:\ abc \

関連する問題