我对 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 正则表达式语言的一个元字符,它不能单独出现未转义(它必须跟在匹配中重复零次或多次的表达式之后),两种方法对其进行不同的处理。
关于java - 带有特殊字符的 String 的 contains 和 replaceAll 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9839232/