繁体   English   中英

String的奇怪行为包含和replaceAll方法与特殊字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM