为什么java开发人员按照我们从模式中获取匹配器的方式?我的意思是
Matcher matcher=pattern.matcher(string)
我认为逻辑上必须有像
这样的东西Pattern pattern=Pattern.compile(pattern);
Matcher matcher=new Matcher(pattern,string);
//if we need
matcher.setPattern(newPattern);
我的意思是匹配器就像一个正则表达式引擎,模式就像这个引擎的命令。为什么我们从命令创建引擎?
答案 0 :(得分:3)
模式匹配算法的实现需要跟踪某些状态变量。
由于Pattern
表示线程安全对象,因此它本身不能包含这些变量(否则它不会是线程安全的),因此这些变量存储在为单个匹配调用创建的匹配器对象中,而不是线程安全的。来自Pattern
Javadoc:
此类的实例是不可变的,并且可以安全地供多个人使用 并发线程。 Matcher类的实例不安全 这种用法。
此外,Matcher
类还可以访问匹配结果等匹配结果。
答案 1 :(得分:1)
来自Matcher
Javadoc,
通过调用模式的
matcher
方法从模式创建匹配器。
这是Builder pattern的示例。根据链接的维基百科页面
构建器模式的目的是找到伸缩构造函数的解决方案anti-pattern