replace和replaceAll是都是String类中提供的两种用于字符/字符串替换的方法,从字面意思理解,replace表示替换单个匹配项,而replaceAll表示替换所有匹配项;实际上并不是这样子的,replace和replaceAll都是替换所有匹配项,replace是非正则模式替换,replaceAll是正则模式替换。
String类中一共提供了四种替换字符/字符串相关的方法,分别是replace的两个重载方法、replaceAll方法和replaceFirst方法
replace(字符):全部匹配的都替换;参数为字符(char)类型;不调用Pattern和Matcher方法。
replace(字串接口实现类):全部匹配的都替换;参数为字串接口实现类(如String);不支持正则匹配,调用Pattern(不匹配正则模式)和Matcher的replaceAll方法。
replaceAll:全部匹配的都替换,参数为String类型,支持正则匹配;调用Pattern(匹配正则模式)和Matcher的replaceAll方法。
replaceFirst:第一个匹配到的替换,参数为String类型,支持正则匹配;调用Pattern(匹配正则模式)和Matcher的replaceFirst方法。
主要相关的类主要有String、Pattern、Matcher
对应的调用关系图:
使用replaceAll和replaceFirst方法需要注意,参数要为正确的正则表达式,如果不正确会导致替换失败甚至报错。
比如下面的代码:
String b = "这才是进度款发动机(ssdc)";
String regexp = "这才是进度款发动机ssdc)";
String vb = b.replaceAll(regexp, "AA");
System.out.println(vb);
执行的时候会提示:
java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 12
提示我们正则表达式有误,没有正确的使用')'进行关闭。所以使用replaceAll和replaceFirst是需要注意自己的正则表达式有没有写对的。