NightTassel
 1     public String replace(char oldChar, char newChar) {
 2         if (oldChar != newChar) {
 3             int len = value.length;
 4             int i = -1;
 5             char[] val = value; /* avoid getfield opcode */
 6 
 7             while (++i < len) {
 8                 if (val[i] == oldChar) {
 9                     break;
10                 }
11             }
12             if (i < len) {
13                 char buf[] = new char[len];
14                 for (int j = 0; j < i; j++) {
15                     buf[j] = val[j];
16                 }
17                 while (i < len) {
18                     char c = val[i];
19                     buf[i] = (c == oldChar) ? newChar : c;
20                     i++;
21                 }
22                 return new String(buf, true);
23             }
24         }
25         return this;
26     }

该代码的逻辑为:

1、首先查找字符串中是否有需要替换的字符,并记录此位置为i

2、接下来判断是否存在,如果i的值字符串长度说明此字符串不包含需要被替换的字符,则直接返回原字符串的引用

3、如果存在需要替换的字符,则开辟新的空间并将i之前的字符串复制到新开辟的空间中,之后对i及之后的字符串进行判断后复制

4、构建新的String对象并返回

 

给我的提示:

1、replace方法并不会每次都构建新的String对象

2、String对象所代表的字符串是保存在一个char[]数组中,为final,但是保存的内容并不是不可变的(通过反射)

3、改实现首先判断是否存在需替换的字符,然后在需要的时候才进行内存的开辟和对象的构建,提高了代码的效率,减少了内存的消耗

4、编码过程中对于一个需求的实现,首先分析未发生该事件时的处理办法,然后基于分析完成后续的编码

分类:

技术点:

相关文章:

  • 2021-09-12
  • 2022-12-23
  • 2022-02-04
  • 2022-02-06
  • 2021-12-27
  • 2021-09-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-22
相关资源
相似解决方案