gpt4 book ai didi

java - 正则表达式匹配或数组搜索

转载 作者:行者123 更新时间:2023-11-30 09:08:50 25 4
gpt4 key购买 nike

假设我有 60 个单词,我想检查输入是否是这些单词中的任何一个

哪个更快:
1) 制作一个正则表达式并对其中的单词进行 ORing
2) 在数组上循环并搜索?

最佳答案

您可以自己轻松测试。出于好奇,我创建了一个 test case四种不同的场景:

  1. Pattern.matcher().matches() 带有按需 Pattern 实例(为每次运行创建)
  2. Pattern.matcher().matches() 带有缓存的 Pattern 实例(在所有运行之前创建)
  3. String.equals() 针对数组中的每个元素,在循环中执行
  4. Set.contains() 在缓存的 Set 上(在所有运行之前创建)

数据集:输入数组包含 6000 个随机生成的字符串,每个字符串包含 6 个字符。每个测试执行 10,000 次,对所有运行的结果求和并取平均值。

结果(所有时间均以毫秒为单位 - 越低显然越好)。第一个数字是所有 10,000 次运行的总执行时间,第二个数字是每次运行的平均值:

On-Demand Regex:    12934 (1.29 avg)
Pre-compile Regex: 458 (0.05 avg)
Loop: 77 (0.01 avg)
Set.contains: 4 (0.00 avg)

长话短说:如果您要使用正则表达式(您不应该这样做),至少要创建并缓存 Pattern。但假设性能很重要,如果您提前知道单词列表,您就不会击败 Set.contains()

注意 按需正则表达式测试包括构造提供给 Pattern.compile() 方法的 StringBuilder 实例的成本,所以不一定所有的额外时间都花在正则表达式编译上。 Set.contains 测试还有一个小小的优势,那就是它是内联的,并且避免了方法调用的额外堆栈创建。我修改了测试,让它在一个单独的方法中执行,但这并没有对结果产生实质性影响。

关于java - 正则表达式匹配或数组搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23331359/

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