replace(char oldChar, char newChar)
/**
* @param oldChar 旧的字符
* @param newChar 新的字符
* @return 返回替换后的新字符串
*/
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;
}
}
//上面是先找到一个旧的字符的位置
//i小于字符串的长度说明找到
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 replace(char oldChar, char newChar) {
//首先判断新字符和旧的字符是否相等
if (oldChar != newChar) {
//获取字符串的长度
int len = value.length;
//字符串的下标索引
int i = -1;
char[] val = value;
char buf[] = new char[len];
//查找并替换
while (++i < len) {
if (val[i] == oldChar) {
buf[i] = newChar;
} else {
buf[i] = val[i];
}
}
return new String(buf, true);
}
return this;
}
可能是因为我们直接创建 char buf[] = new char[len];可能会造成内存浪费,因为源字符串中可能不存在旧的字符。
java源码的思路是先找到一个旧的字符才去创建的,然后在逐一替换
文章转载参照:
http://www.516tool.com/java/31.html