“静态”模式不应该总是静态的吗?
2022-09-01 10:43:12
我刚刚在一些我没有写的代码中发现了一个错误,我有点惊讶:
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}");
总是比非静态模式引用更可取?