Java字符替换效率⽐较
blog.csdn/feng88724/article/details/7974355
[java]
01. public static String encode(String str) {
02. if(str == null) {
03. return null;
04.    }
05.    str = place('+', '~');
06.    str = place('/', '_');
07.    str = place('=', '.');
08. return str;
09. }
10.
11. public static String encode2(String str) {
12. if(str == null) {
13. return null;
14.    }
15.    str = place("+", "~");
16.    str = place("/", "_");
17.    str = place("=", ".");
18. return str;
19. }
20.
21. public static String encode3(String str) {
22. if(str == null) {
23. return null;
24.    }
25. char[] array = CharArray();
26. for (int i = 0, length = array.length; i < length; i++) {
27. if(array[i] == '+') {
28.            array[i] = '~';
29.        } else if(array[i] == '/') {
30.            array[i] = '_';
31.        } else if(array[i] == '=') {
32.            array[i] = '.';
33.        }
34.    }
35. return new String(array);
36. }
写了如上三个⽅法,3个⽅法都能达到字符替换的效果,但是效率不⼀样;第⼀种、第⼆种⽅式都是遍历三遍, 第三种遍历⼀遍;
测试字符串为:
String str = "asdasddasd+asd/asdadas======asdasd++++++++//===kkkklakdjfh";
执⾏1000000次,结果为:
3031
51706
1401
第三种数组的效率最⾼啊;
测试字符串为:
String str = "asdasddasdasdasddasdasdasddasdasdasddasdasdasddasdasdasddasdasdasddasd";
执⾏1000000次,结果为:
1169
22874
1496
第⼀种replace的效率反⽽⾼了。
原因是replace⽅法会先去查字符串中是否包含需要替换的字符,如果没有就直接返回了,有才会去
遍历替换(下⾯是replace源码,有兴趣的可以看下);所以当⽬标字符串中不包含需要替换的字符时,replace效率最⾼;
在⽇常开发中,就不要折腾了,直接调⽤replace来处理即可。
[java]
01. public String replace(char oldChar, char newChar) {
02. if (oldChar != newChar) {
03. int len = count;
04. int i = -1;
05. char[] val = value; /* avoid getfield opcode */
06. int off = offset;  /* avoid getfield opcode */
07.
08. while (++i < len) {
09. if (val[off + i] == oldChar) {
10. break;
11.    }
12.    }
13. if (i < len) {
14. char buf[] = new char[len];
15. for (int j = 0 ; j < i ; j++) {
16.        buf[j] = val[off+j];
17.    }
18. while (i < len) {
19. char c = val[off + i];
20.        buf[i] = (c == oldChar) ? newChar : c;
21.        i++;
22.    }
23. return new String(0, len, buf);
24.    }
25. }
26. return this;
27.    }
28.java replace方法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。