考虑3个正则表达式,旨在从字符串中删除非拉丁字符.
String x = "some†¥¥¶¶ˆ˚˚word";
long now = System.nanoTime();
System.out.println(x.replaceAll("[^a-zA-Z]", "")); // 5ms
System.out.println(System.nanoTime() - now);
now = System.nanoTime();
System.out.println(x.replaceAll("[^a-zA-Z]+", "")); // 2ms
System.out.println(System.nanoTime() - now);
now = System.nanoTime();
System.out.println(x.replaceAll("[^a-zA-Z]*", "")); // <1ms
System.out.println(System.nanoTime() - now);
所有3个产生相同的结果,性能指标差别很大.
这是为什么?
最佳答案 第一个较慢,因为正则表达式单独匹配每个非拉丁字符,因此replaceAll分别对每个字符进行操作.
其他模式匹配非拉丁字符的整个序列,因此replaceAll可以一次性替换整个序列.但是,我无法解释这两者之间的性能差异.可能与处理*和正则表达式引擎中的差异有关.