【发布时间】:2019-03-11 19:41:15
【问题描述】:
我从Java Pattern Matcher: create new or reset? 了解到,如果我在单线程上下文中,最好重用Matcher。
假设我有一个使用File.list(basePath) 的路径流,我想根据它们的文件名与正则表达式的匹配来过滤它们。看来我应该为流中的每个路径文件名使用matcher.reset(filename)。太棒了。
但是如何初始化 Matcher 以便我可以重用它,而无需先创建它并匹配某些东西?因为我不知道第一个“东西”会是什么——我什至不知道是否会有“东西”(例如某个目录中的文件)。
那么我这样做是为了开始吗?
final Matcher filenamePatternMatcher=filenamePattern.matcher("");
这看起来既麻烦又浪费。但如果我将filenamePatternMatcher 设置为null,我将不得不对处理单个文件进行不必要的检查,例如:
if((filenamePatternMatcher!=null
? filenamePatternMatcher.reset(filename)
: filenamePattern.matcher(filename)).matches) {…}
此外,我什至不能在 Stream<Path> 中这样做,因为匹配器必须是有效的最终。
那么,有什么优雅的方法可以创建一个匹配器,然后使用Matcher.reset() 匹配字符串呢? Java API 创建者没有想到这个用例吗?
【问题讨论】: