Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串的奇怪行为';s包含并替换所有具有特殊字符的方法_Java_String_Replaceall_Contain - Fatal编程技术网

Java 字符串的奇怪行为';s包含并替换所有具有特殊字符的方法

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

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

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

参数包含
replaceAll
的第一个参数的解释是不同的:前者只是一个字符序列,而后者是一个字符序列。由于
*
是Java的regexp语言的元字符,不能单独显示为无scape(它必须跟在匹配中重复零次或多次的表达式后面),因此这两种方法对它的处理方式不同。

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