gpt4 book ai didi

java - 比较不同正则表达式的性能,需要澄清

转载 作者:搜寻专家 更新时间:2023-11-01 03:27:40 24 4
gpt4 key购买 nike

考虑 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 可以一次性替换整个序列。不过,我无法解释这两者之间的性能差异。可能与正则表达式引擎中处理 *+ 的差异有关。

关于java - 比较不同正则表达式的性能,需要澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9155291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com