今天在做题过程中遇到了replace()方法,顺便做笔记总结一下replace三种方法的使用方法和他们之间的区别。
01 replace方法定义: replace(char oldChar, char newChar) 用newChar字符替代oldChar字符,返回一个新的字符串
02 replaceAll方法定义: replaceAll(String regex, String replacement) , 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。, replaceAll和replaceFirst要求第一个参数regex是正则表达式,replacement是字符串
03 replaceFirst方法定义: replaceFirst(String regex, String replacement),基本和replaceAll相同,区别是只替换第一个匹配项
举例:
String src = new String("ab43a2c43d");
System.out.println(src.replace("3","f")); //ab4f2c4fd.
System.out.println(src.replace('3','f')); //ab4f2c4fd.
System.out.println(src.replaceAll("\\d","f")); //abffafcffd.数字型全部替换为f
System.out.println(src.replaceAll("a","f")); //fb43fc23d.
System.out.println(src.replaceFirst("\\d,"f")); //abf32c43d第一个数字型替换为f
System.out.println(src.replaceFirst("4","h")); //abh32c43d.
思考: 如何将字符串中的"“替换成”\"
String s=abcd;
//如何将把源字符串中的a替换成\a
System.out.println("abac".replace("a", "\\a")); // 结果为:\ab\ac
System.out.println("abac".replaceAll("a", "\\\\a")); //结果为:\ab\ac
System.out.println("abac".replaceFirst("a", "\\\\a")); //结果为:\abac
分析:源字符串是"abac",然后我们找到"a",把它替换成\a,由于\是java转义字符,所以想表达\a必须写成"\a",第一个反斜线将第二个反斜线转义成普通字符串,但是对于replace是这样的,而replaceAll和replaceFirst要求第一个参数是正则表达式,“a"既能理解成字符串a,也可以理解成正则表达式a,所以如果我们想用replaceAll和replaceFirst表达反斜线,就必须再转义一次, 需要用//代表一个/
简单理解一下,”\\a"中前边的反斜线分别转义后边的反斜线,让后边的反斜线就是普通字符串,这样在java内存中看到的字符串就是"\a",然后replaceAll函数在处理时,再用前边的反斜线转义后边的反斜线,来表达后边的反斜线就是普通字符串,不是用来转义$的,最终内存中的字符串就是"\a",这样才可以成功将a替换成\a
总结:
不同点
1:replace的参数是char和CharSequence,即能够支持字符的交换,也支持字符串的交换(CharSequence即字符串序列的意义,说白了也就是字符串);
2:replaceAll的参数是regex,即基于正则表达式的交换,比方,能够经过replaceAll(“\d”, “*”)把一个字符串一切的数字字符都换成星号;
相同点:
都是全部交换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,假如只想交换第一次呈现的,能够运用replaceFirst(),这个办法也是基于规则表达式的交换,但与replaceAll()不同的是,只交换第一次呈现的字符串;
另外,假如replaceAll()和replaceFirst()所用的参数据不是基于规则表达式的,则与replace()交换字符串的效果是一样的,即这两者也支持字符串的操作; 还有一点要注意:执行了交换操作后,源字符串的内容是没有发作改动的。