replace和replaceAll,是字符串替换的两个方法,返回值为替换后的字符串,假设现在有个字符串变量str="abcda",现在有如下代码片段:
str.replace("a", "A"); str.replaceAll("a", "A");
如果单单看这两个方法的名字来臆测结果的话,很容易就产生这样一个结果:
replace替换后的结果是:Abcda,而replaceAll替换后的结果是:AbcdA,all嘛,自然比不带all的替换的多一点,然后实际的结果是什么呢?
两者的结果都是:AbcdA。那么该如何理解这两个方法的区别呢?首先,可以从两个方法的定义来入手:
public String replace(oldChar, newChar); public String replaceAll(regex, replacement);
已经显而易见了。
区别:
replace和replaceAll的第一个参数是不一样的,replace的第一个参数只能是字符或者字符串,而replaceAll的第一个参数是作为正则表达式来被方法解析的。
共同点:
两者返回值都是最终被替换后的字符串。
两者都是全部替换,并不存在谁替换多少的问题,两个方法不具有可比性。
典型案例:
package com.sms.service.impl; public class ConfigServiceImpl { public static void main(String[] args) { String userDir=System.getProperty("user.dir"); System.out.println(userDir);//结果:D:\workspace3\aaaa String replaceUserDir=userDir.replace("\\", "/"); System.out.println(replaceUserDir);//结果:D:/workspace3/aaaa String replaceAllUserDir=userDir.replaceAll("\\\\", "/"); System.out.println(replaceAllUserDir);//结果:D:/workspace3/aaaa } }
运行结果如注释所示:
D:\workspace3\aaaa D:/workspace3/aaaa D:/workspace3/aaaa
代码说明:
为什么replaceAll的第一个参数是"\\\\",首先“\”在正则表达式里面是转义字符,我们要想在java代码里面使用这个"\"转义字符,需要这样写:"\\",其次,要替换的是userDir这个字符串里面的"\",而在java代码里面要正确书写这样的符号,也要通过"\"来转义。所以总共四个"\\\\",从左往右说,第一个是java语法,表示转义它后边的字符,第二个是正则表达式里面的转义字符,被第一个"\"转义,第三个的意思和第一个一样,第四个表示被第三个转义的字符。