0

私は\使用String.replaceAllを置き換えようとしていますが、そうしている間に例外が発生します。これが私のコードです:

    String str = "1^\\";
    System.out.println("\nInitial string length: "+str.length()+ " Initial String is:     "+str);
    String temp = str.replaceAll("[&@;^\\]","");

これは出力です:

Initial string length: 3 Initial String is: 1^\

Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed character     class near index 6
 [&@;^\]
  ^
at java.util.regex.Pattern.error(Pattern.java:1713)
at java.util.regex.Pattern.clazz(Pattern.java:2254)
at java.util.regex.Pattern.sequence(Pattern.java:1818)
at java.util.regex.Pattern.expr(Pattern.java:1752)
at java.util.regex.Pattern.compile(Pattern.java:1460)
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)
4

2 に答える 2

5

エスケープは\\文字列リテラルに飲み込まれているため、正規表現として解析している文字列は実際には[&@;^\].

\]正規表現では をエスケープする]ため、閉じられていない文字クラスがあります。

\;をダブルエスケープする必要があります。文字列リテラル用に 1 回、正規表現用に 1 回。

于 2012-09-21T16:05:36.533 に答える
3

String と regex のエスケープ文字は同じです。これは取得することを意味します

\\\\ - in the String
\\ - in the regex
\ - means
于 2012-09-21T16:06:34.473 に答える