public class Ques0103 {
public static void main(String[] args){
System.out.println(delete("你好", "你").equals("好"));
System.out.println(delete("$好", "$").equals("好"));
}
public static String delete(String string, String sub){
return string.replaceAll(sub, "");
}
}
请问主程序输出结果是什么?
true
false
"你" 非正则特殊字符,按字面匹配。"好",equals("好") 返回 true。"$" 在正则表达式中是**行尾锚点**,匹配字符串结束位置(空宽度断言),**不匹配字面字符 '$'**。replaceAll("$", "") 相当于在字符串末尾插入空串,**原字符串内容不变**,仍为 "$好"。"$好".equals("好") 返回 false。String.replaceAll(String regex, String replacement) **第一个参数是正则表达式**!
若需按字面字符串替换,必须转义特殊字符:
string.replaceAll("\\$", "")(Java 字符串中需双重转义)。Pattern.quote("):string.replaceAll(Pattern.quote("$"), "")。string.replace(CharSequence target, CharSequence replacement)(**不支持正则**,直接字面替换,性能更好)。public static String delete(String string, String sub){
// 方式一:使用 replace (推荐,简单高效)
return string.replace(sub, "");
// 方式二:若必须用 replaceAll,需转义
// return string.replaceAll(Pattern.quote(sub), "");
}
| 字符 | 正则含义 | 字面匹配写法 |
|---|---|---|
. | 任意单字符 | \\. |
$ | 行尾 | \\$ |
^ | 行首 | \\^ |
* + ? | 量词 | \\* \\+ \\? |
[ ] { } ( ) | \\ | 分组/字符类/或/转义 | 均需 \\ 转义 |
**切记:`replaceAll` 吃正则,`replace` 吃字面量。** 日常简单替换首选 replace,避坑又高效。