我刚刚在一些我未编写的代码中发现了一个错误,我对此感到有些惊讶:
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}");
总是比非静态模式引用更可取?
Pattern
static
Matcher
静态初始值设定项中有关编译模式的唯一警告是,如果该模式未编译且静态初始值设定项引发异常,则错误的来源可能非常令人讨厌。这是一个较小的可维护性问题,但可能值得一提。