1

我对字符串的 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

我想知道这背后的理论/规则是什么?

4

2 回答 2

3

的参数contains和第一个参数的replaceAll解释不同:前者只是一个字符序列,而后者是一个正则表达式。由于*它是 Java 正则表达式语言的元字符,不能单独出现未转义(它必须跟随在匹配中重复零次或多次的表达式),因此两种方法对它的处理方式不同。

于 2012-03-23T12:36:59.060 回答
0

str.replaceAll(...) 使用正则表达式作为第一个参数。字符 *,$,^,+,? 和其他是正则表达式语法的一部分。有关replaceAll 如何处理它们的详细信息,请参见链接。

于 2012-03-23T12:45:27.727 回答