gpt4 book ai didi

java - "static"模式不应该总是静态的吗?

转载 作者:IT老高 更新时间:2023-10-28 20:39:36 25 4
gpt4 key购买 nike

我刚刚在一些我没有写的代码中发现了一个错误,我有点惊讶:

Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");
Matcher matcher = pattern.matcher(s);

尽管这段代码在我们得到的输入数据上失败了 (因为它试图以 17.01.2011 格式查找日期并取回 10396/2011 之类的内容,然后由于无法解析日期,但 真的 不是这个问题的重点;) 我想知道:

  • Pattern.compile 的重点之一不是作为速度优化(通过预编译正则表达式)吗?

  • 所有“静态”模式不应该总是编译成静态模式吗?

网络上有很多示例,其中总是使用 Pattern.compile 重新编译相同的模式,我开始怀疑我是否看到了一些东西。

不是(假设字符串是静态的,因此不是动态构造的):

static Pattern pattern = Pattern.compile("\\d{1,2}.\\d{1,2}.\\d{4}");

总是优于非静态模式引用?

最佳答案

  1. 是的,预编译 Pattern 的全部意义在于只执行一次。
  2. 这实际上取决于您将如何使用它,但一般来说,存储在 static 字段中的预编译模式应该没问题。 (与 Matcher 不同,它不是线程安全的,因此根本不应该真正存储在字段中,无论是否静态。)

在静态初始化程序中编译模式的唯一警告是,如果模式无法编译并且静态初始化程序抛出异常,那么追踪错误的来源可能会非常烦人。这是一个小的可维护性问题,但可能值得一提。

关于java - "static"模式不应该总是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935216/

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