我使用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
我想知道这背后的理论/规则是什么?
答案 0 :(得分:3)
contains
的参数和replaceAll
的第一个参数被解释为:前者只是一个字符序列,而后者是regular expression 。由于*
是Java正则表达式语言的元字符,它不能单独出现(它必须跟随表达式在匹配中重复零次或多次),因此它被视为这两种方法不同。
答案 1 :(得分:0)
str.replaceAll(...)使用正则表达式作为第一个参数。 人物*,$,^,+,?和其他人是正则表达式语法的一部分。有关replaceAll如何处理这些内容的详细信息,请参阅link。