Java中String对象的replaceAll方法调用性能优化小技巧
0x01 Java中String对象的replaceAll方法调用性能优化小技巧1.1 What?1.2 Why?1.3 how to fix it?0x02 参考文献0x01 Java中String对象的replaceAll方法调用性能优化小技巧
1.1 What?
如果项目中有很多地方用到了String对象的replaceAll方法,那么像如下这样写是有一定性能问题的:
public static void main(String[] args) {String a="AAAA,BBBB";String regex=",";String repl="";String b=a.replaceAll(regex,repl);System.out.println(b);}
1.2 Why?
Talk is easy ,show you the code as below:
public static void main(String[] args) {String a="AAAA,BBBB";String regex=",";String repl="";String b=a.replaceAll(regex,repl);// a.replaceAll(regex,repl) 底层实现String c= pile(regex).matcher(a).replaceFirst(repl);// pile(regex)底层实现是这样的:// new Pattern(regex, 0).matcher(a).replaceFirst(repl);// b和c是等价的System.out.println(b);System.out.println(c);}
我们可以看到,每做一次replaceAll替换,就需要new Pattern(regex, 0);
一次
但实际上如果regex是固定的,项目中多次执行这个方法,那么我们如果这样写,你觉得是不是对象创建的浪费呢?
1.3 how to fix it?
那么如何修复呢?
private static final Pattern PATTERN=pile(",");public static void main(String[] args) {String a="AAAA,BBBB";// 建议修复方案String d= PATTERN.matcher(a).replaceFirst(repl);}