Java中String对象的replaceAll方法调用性能优化小技巧
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= Pattern.compile(regex).matcher(a).replaceFirst(repl);
// Pattern.compile(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=Pattern.compile(",");
public static void main(String[] args) {
String a="AAAA,BBBB";
// 建议修复方案
String d= PATTERN.matcher(a).replaceFirst(repl);
}