public String replace(char oldChar, char newChar) {
if (oldChar != newChar)
{
int len = value.length;//value就是一个数组,这里得到string字符串的长度
int i = -1;
char[] val = value; /* avoid getfield opcode */
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;
}
使用方法举例: string.replace('e','o') 将string字符串中所有的e转换为o
这段代码的精髓之处:1.为了程序更快,所以才先确保原来的字符串中有旧的字符,不然会白白循环很多次
2.找到后,创建一个新的字符串buf,长度和原字符串一样,再用while循环替换所有的旧字符.
我们来分析一下这样做的效率提升:
如果不判断字符串是否有旧字符,直接执行
while (i < len)
{
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
有n个字符,每个字符要执行判断的次数为: while语句1次,char c赋值1次,c==oldChar判断1次,赋值给buf[i] 1次
i++ 1次,所以总操作数为 5n
而先判断有旧字符再while循环,找到旧字符前每个字符只要执行3次操作,明显提升了程序效率
(具体操作次数,新手入门,可能会有纰漏,恳请指正)