【问题标题】:Java Pattern Matcher: create new or reset?Java模式匹配器:新建还是重置?
【发布时间】:2012-07-08 15:10:27
【问题描述】:

假设Regular Expression,通过Java Matcher 对象与大量字符串进行匹配:

String expression = ...; // The Regular Expression
Pattern pattern = Pattern.compile(expression);
String[] ALL_INPUT = ...; // The large number of strings to be matched

Matcher matcher; // Declare but not initialize a Matcher

for (String input:ALL_INPUT)
{
    matcher = pattern.matcher(input); // Create a new Matcher

    if (matcher.matches()) // Or whatever other matcher check
    {
         // Whatever processing
    }
}

Java SE 6 JavaDoc for Matcher 中,人们可以通过reset(CharSequence) 方法找到重用相同Matcher 对象的选项,正如源代码所示,该方法比创建一个新的Matcher 更便宜一些时间,即,与上述不同,可以这样做:

String expression = ...; // The Regular Expression
Pattern pattern = Pattern.compile(expression);
String[] ALL_INPUT = ...; // The large number of strings to be matched

Matcher matcher = pattern.matcher(""); // Declare and initialize a matcher

for (String input:ALL_INPUT)
{
    matcher.reset(input); // Reuse the same matcher

    if (matcher.matches()) // Or whatever other matcher check
    {
         // Whatever processing
    }
}

应该使用上面的reset(CharSequence) 模式,还是应该更喜欢每次都初始化一个新的Matcher 对象?

【问题讨论】:

  • 无论如何都要重用Matcher。创建新Matcher 的唯一充分理由是确保线程安全。这就是你不创建public static Matcher m 的原因——事实上,这就是首先存在一个单独的Pattern 类的原因。
  • 那么,对于单线程应用程序,即使是作为实例或类变量,或者对于在方法内创建 Matcher 对象的多线程应用程序,reset() 就可以了,是吗?跨度>
  • @MarkoTopolnik:我认为将正则表达式的编译与其应用程序分开是拥有Pattern 类的另一个好理由。
  • 在任何情况下,如果您确定在任何时间点只有一个 Matcher 用户,则可以将其与 reset 一起重复使用。
  • 仅供参考,在 Java 1.5 的 java.util.regex.Matcher 类中引入了 reset() 方法和 reset(CharSequence) 方法,并且从那时起就存在了。

标签: java regex reset matcher


【解决方案1】:

无论如何都要重用Matcher。创建新的Matcher 的唯一充分理由是确保线程安全。这就是你不创建public static Matcher m 的原因——事实上,这就是首先存在一个单独的、线程安全的Pattern 工厂对象的原因。

在您确定在任何时间点只有一个Matcher 用户的情况下,可以将其与reset 一起重复使用。

【讨论】:

  • 我认为这个答案会更好,如果它有一个例子显示使用reset...
  • 我鼓励你改进这个有十年历史的答案:)
猜你喜欢
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
相关资源
最近更新 更多