1

StringのcontainsメソッドとreplaceAllメソッドを使って少し調べました。

char c = '*';

String str = "1220"+c+""+c+""+c+""+c+""+c+"23";
System.out.println(str.contains(c+""));
System.out.println(str.contains("["+c+"]"));
System.out.println(str.contains("\\"+c));


System.out.println(str.replaceAll("["+c+"]", "X"));
System.out.println(str.replaceAll("\\"+c, "X"));
System.out.println(str.replaceAll(c+"", "X"));

結果:c='*'または'^'または'+'の場合

true
false
false
1220XXXXX23
1220XXXXX23
java.util.regex.PatternSyntaxException

c ='#'または'〜'または'%'または'<'または'>'または'='または'&'または'@'または'-'または'!'の場合

true
false
false
1220XXXXX23
1220XXXXX23
1220XXXXX23

c='$'の場合

true
false
false
1220XXXXX23
1220XXXXX23
1220$$$$$23X

c='|'の場合

true
false
false
1220XXXXX23
1220XXXXX23
X1X2X2X0X|X|X|X|X|X2X3X

この背後にある理論/ルールは何ですか?

4

2 に答える 2

3

の引数containsとの最初の引数はreplaceAll異なる方法で解釈されます。前者は単なる文字シーケンスであり、後者は正規表現です。*はJavaの正規表現言語のメタ文字であり、それ自体ではエスケープされていないように見えることはありません(一致で0回以上繰り返される式に従う必要があります)ので、2つの方法で異なる方法で処理されます。

于 2012-03-23T12:36:59.060 に答える
0

str.replaceAll(...)は、最初の引数として正規表現を使用します。文字*、$、^、+ 、? その他は正規表現構文の一部です。replaceAllによる処理方法の詳細については、リンクを参照してください。

于 2012-03-23T12:45:27.727 に答える