Java:为什么我们从Pattern获得Matcher

时间:2015-10-05 17:08:06

标签: java regex

为什么java开发人员按照我们从模式中获取匹配器的方式?我的意思是

Matcher matcher=pattern.matcher(string)

我认为逻辑上必须有像

这样的东西
Pattern pattern=Pattern.compile(pattern);
Matcher matcher=new Matcher(pattern,string);
//if we need
matcher.setPattern(newPattern);

我的意思是匹配器就像一个正则表达式引擎,模式就像这个引擎的命令。为什么我们从命令创建引擎?

2 个答案:

答案 0 :(得分:3)

模式匹配算法的实现需要跟踪某些状态变量。

由于Pattern表示线程安全对象,因此它本身不能包含这些变量(否则它不会是线程安全的),因此这些变量存储在为单个匹配调用创建的匹配器对象中,而不是线程安全的。来自Pattern Javadoc:

  

此类的实例是不可变的,并且可以安全地供多个人使用   并发线程。 Matcher类的实例不安全   这种用法。

此外,Matcher类还可以访问匹配结果等匹配结果。

答案 1 :(得分:1)

来自Matcher Javadoc,

  

通过调用模式的matcher方法从模式创建匹配器。

这是Builder pattern的示例。根据链接的维基百科页面

  

构建器模式的目的是找到伸缩构造函数的解决方案anti-pattern