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

文字列リテラルで\は、別の でエスケープする必要があります\。また、 a reges では、 a\も別の によってエスケープする必要があります\\\したがって、 4 回ごとにエスケープする必要があります\\\\

別の方法は、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.replaceおよびMatcher.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 に答える