String的replace()方法和replaceAll()使用

java.lang.String类为替换字符串提供了2个方法replace()和replaceAll(),从字面意思理解,replace()是将字符串中出现的所有字符(串)用指定的字符(串)替换,要注意是所有的字符(串),如

String str = "q2?12?ew";
str = str.replace("?", "");
System.out.println(str);
结果:q212ew

如果将“?”进行转义,则结果却不一样

String str = "q2?12?ew";
str = str.replace("\\?", "");
System.out.println(str);
结果:q2?12?ew

因为str.replace("\\?", "")表示将str字符串中出现"\\?"的字符全部替换为""。如果想用正则表达式替换字符串,这时就需要使用replaceAll方法了,这个方法是专门为正则表达式设计的,replaceAll(String regex, String replacement)第一个参数是正则表达式,第二个参数是待替换的值。其中正则表达式的关键字有

字符 说明
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
.

匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."

? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
String str = "q2?12?ew";
str = str.replaceAll("?", "");
System.out.println(str);
结果:Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0
因为"?"是修饰匹配次数为 0 次或 1 次,所以"?"不是一个正确的正则表达式,若要能正确运行,需要将"?"进行转义,代码为:str = str.replaceAll("\\?", "");

    此时如果运行一下代码,情况则又完全不一样了

String str = "q2.12.ew";
str = str.replaceAll(".", "");
System.out.println(str);
结果:空字符串,因为"."表示匹配除了换行符以外的任意字符,"q2.12.ew"字符串所有的字符均符合替换规则,所以全部被替换成""。此时需要将"."进行转义,代码为:str = str.replaceAll("\\.", "");

但是转义符也不能乱用,不能将不是正则表达式所规定的特殊字符进行转义,否则结果会出乎意料,用如下代码说明

String str = "q2.12.ew";
str = str.replaceAll("\\2", "");
System.out.println(str);
结果:q2.12.ew。相当于字符串没被替换,因为此时是查找"q2.12.ew"字符串,将其中的"\\2"字符串替换成"",注意是"\\2"字符串

你可能感兴趣的:(String的replace()方法和replaceAll()使用)