我对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
我想知道这背后的理论/规则是什么?
最佳答案
contains
的参数和replaceAll
的第一个参数的解释不同:前者只是一个字符序列,而后者是一个regular expression。由于*
是Java regexp语言的元字符,不能单独显示为转义字符(必须遵循一个表达式在匹配中重复零次或多次),因此这两种方法将其区别对待。