代码
public static void main(String[] args) {
String aa = "asdfghjklzxcvbnmasdfghjklzxcvbnmasdfghjklzxcvbnm";
System.out.println(aa.replace('b', '1'));
System.out.println(aa.replace("bnm", "123"));
System.out.println(aa.replaceAll("bnm", "123"));
System.out.println(aa.replaceFirst("bnm", "123"));
}
结果
asdfghjklzxcv1nmasdfghjklzxcv1nmasdfghjklzxcv1nm asdfghjklzxcv123asdfghjklzxcv123asdfghjklzxcv123 asdfghjklzxcv123asdfghjklzxcv123asdfghjklzxcv123 asdfghjklzxcv123asdfghjklzxcvbnmasdfghjklzxcvbnm
replace 和 replaceAll 的效果都是 全部替换
replaceFirst 的效果是 替换首次出现的字符
public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value;
while (++i < len) {
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
while (i < len) {
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(buf, true);
}
}
return this;
}
public String replaceFirst(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
}
public String replaceAll(String regex, String replacement) {
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}
看源码 replace 的参数是 CharSequence 或者 char
当参数是 char 时 用 newChar 替换掉 oldChar
当参数为 CharSequence 时 最终调用的方法和 replaceAll 是同一个
replaceAll 的参数是 String ;支持字符串和正则表达式
当参数传的是普通字符串时 效果与 replace 一致
replaceFirst 的参数是 String ; 支持字符串和正则表达式
替换首次匹配到的字符
参考博客
https://wenku.baidu.com/view/39b0d047deccda38376baf1ffc4ffe473368fdea.html
https://blog.csdn.net/atongmu2017/article/details/103889830
https://www.jb51.net/article/157844.htm



