Java 字符串的奇怪行为';s包含并替换所有具有特殊字符的方法
我对字符串的contains和replaceAll方法做了一些研究Java 字符串的奇怪行为';s包含并替换所有具有特殊字符的方法,java,string,replaceall,contain,Java,String,Replaceall,Contain,我对字符串的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.r
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
我想知道这背后的理论/规则是什么?的
参数包含和replaceAll
的第一个参数的解释是不同的:前者只是一个字符序列,而后者是一个字符序列。由于*
是Java的regexp语言的元字符,不能单独显示为无scape(它必须跟在匹配中重复零次或多次的表达式后面),因此这两种方法对它的处理方式不同。str.replaceAll(…)使用正则表达式作为第一个参数。
字符*,$,^,+,?还有一些是正则表达式语法的一部分。有关replaceAll如何处理它们的详细信息,请参见