我对字符串的 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
我想知道这背后的理论/规则是什么?