[英]Strange behaviours of the String's contains and replaceAll methods with special characters
我用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
的第一个参数的解释不同:前者只是一个字符序列,而后者是一个正则表达式 。 由于*
是Java的正则表达式语言的元字符 ,它不能单独出现(它必须遵循在匹配中重复零次或多次的表达式),因此两种方法对它的处理方式不同。
str.replaceAll(...)使用正则表达式作为第一个参数。 人物*,$,^,+,? 和其他人是正则表达式语法的一部分。 有关replaceAll如何处理它们的详细信息,请参阅链接 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.