java - 带有特殊字符的 String 的 contains 和 replaceAll 方法的奇怪行为

标签 java string replaceall contain

我对 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/

相关文章:

java - 使用 JMeter 测试异步 Web 服务

Java 数组和循环

Java 正则表达式 : word ending in 's' except specific words

Java 替换全部问题

php - 将文本追加和前置到字符串

jquery - 如何使用 JQuery 将 <br> 标签放入 <td> 内容中?

Java 小程序无法使用 ImageIcon 找到资源图像,除非使用整个路径

java - 在主键列上加入 JPA OneToOne 关系

c - C 中的 fgets 不返回字符串的一部分

string - 如何在字符之间获取字符串(多词)