/*
* JDK 1.8
*
* @param oldChar the old character.
*
* @param newChar the new character.
*
* @return a string derived from this string by replacing every occurrence
* of {@code oldChar} with {@code newChar}.
*/
public String replace(char oldChar, char newChar) {
/* value 为当前字符串对象的字符数组名
如果新替换的字符与老字符相同,直接返回当前字符串对象 */
if (oldChar != newChar) {
int len = value.length;// 获取字符串的长度
int i = -1;
char[] val = value; // 新建一个字符数组val引用指向value字符数组,用于
// 此while循环的目的是找出要被替换的第一个字符在字符数组中的下标位置
while (++i < len) {
/* 当找到第一个被替换的字符时,跳出while循环
* 得到了下标i的值,也就是第一个要替换的位置
* 如果到最后没有找到替换的值,那么跳出循环,i的值将与len一样
* 即不会进入下面的if判断,直接返回当前字符串
*/
if (val[i] == oldChar) {
break;
}
}
//当i的值比当前字符串长度len小的时候
if (i < len) {
//使用当前字符串的长度新创建一个字符数组buf
char buf[] = new char[len];
//对下标在i之前的值不需要替换的字符循环赋值给新数组buf
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
//此处循环是对字符进行替换
while (i < len) {
//没有i++之前把先找到要替换的字符赋值给c
char c = val[i];
/*判断从找到第一个要替换的字符以后 后面的字符是否有与老字符相同的,
如果有,那么把相同的字符替变成新字符,并赋值给buf字符数组
如果不相同,那么就把老字符赋值到buf字符数组中去。
*/
buf[i] = (c == oldChar) ? newChar : c;
//给i+1,直到i>=len,遍历完val最后一个字符后 跳出循环
i++;
}
//把buf变成字符串返回出去
return new String(buf, true);
}
}
return this;
}
水平有限,有问题请留言相告。