字符串的replace和replaceAll

一、替换单个字符

replace()方法

1.replace()方法中的参数为字符char类型

//使IP地址无效化,即将IP中的“.”替换为“[.]

//只能用一个字符替换一个字符“[.]”是一个字符串,所以不能使用char类型作为replace方法的参数

String IP="127.0.0.1";

String ret=IP.replace('.','#');

System.out.println(ret);

输出结果:127#0#0#1

2.replace()方法中的参数为字符charSequence类型

//用一个字符串来替换一个字符串

Stringsip="127.0.0.1";
String ret1=ip.replace(".", "[.]");

System.out.println("ret1:"+ret1);

输出结果:ret1:127[.]0[.]0[.]1

二、替换多个字符

replace()方法

//将“,”和“.”和“$”替换为“#”

String s="A,B.C,D.E,F,G$H,I";
String ret =s.replace(",","#").replace(".","#").replace("$","#");
System.out.println("ret:"+ret);

输出结果:ret:A#B#C#D#E#F#G#H#I

用replace()方法只能一个字符一个字符的替换,当我们想要替换多个字符时很麻烦

replaceAll()方法

参数一:replaceAll()方法使用正则表达式(regex)进行字符的匹配,使用[\,\.\$]可以匹配到多个字符内容

[\,\.\$]:匹配到“,”或“.”或“$”

参数二:要替换的目标字符

例1:

String s="A,B.C,D.E,F,G$H,I";
String ret1=s.replaceAll("[\,\.\$]", "#");
System.out.println("ret1:"+ret1);

输出结果:ret1:A#B#C#D#E#F#G#H#I

例2:

String s1="A,,B..C,D.E,F,G$H,I";
//[\,\.\$]:匹配到不连续的单个字符
//[\,\.\$]+:匹配到多个连续的字符
String ret2=s1.replaceAll("[\,\.\$]", "#");
String ret3=s1.replaceAll("[\,\.\$]+", "#");
System.out.println("ret4:"+ret2);
System.out.println("ret2:"+ret3);
		

输出结果:ret2:A##B##C#D#E#F#G#H#I(一个“,”或者一个“.”匹配一个“#”

                 ret3:A#B#C#D#E#F#G#H#I(连续多个“,”或者一个“.”匹配一个“#”

例3:

String s1="A,,B..C,D.E,F,G$H,I";

//“.”:代表一个正则表达式,可以替换任何字符(.有特殊含义)
String ret5=s1.replaceAll(".", "#");
System.out.println("ret5:"+ret5);
//\:转义字符
//“\.”:代表一个普通字符“.”,仅匹配字符“.”
String ret6=s1.replaceAll("\.", "#");
System.out.println("ret6:"+ret6);

输出结果:ret5:###################

                  ret6:A,,B##C,D#E,F,G$H,I

要查找特殊字符时必须用转义字符\,否则可能会被视为有特殊含义的正则表达式

例4:

[A-Z]+:匹配连续多个大写字母,替换为“#”

String s2="AAA,,B..C,DD.E,F,G$H,I";
//匹配多个连续的大写字母
String ret7=s2.replaceAll("[A-Z]+", "#");
System.out.println("ret7:"+ret7);

输出结果:ret7:#,#.#,#.#,#,#$#,#