Java 模式匹配器:创建新的模式还是重置?

2022-09-01 15:52:21

假设一个 ,它通过 Java 对象与大量字符串匹配:Regular ExpressionMatcher

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中,人们可以通过该方法找到重用同一对象的选项,正如源代码所示,这比每次都创建新的对象便宜一些,也就是说,与上面不同,可以这样做:Matcherreset(CharSequence)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


答案 1

一定要重用 .创建新线程的唯一好理由是确保线程安全。这就是为什么你不做一个 - 事实上,这就是一个单独的,线程安全的工厂对象首先存在的原因。MatcherMatcherpublic static Matcher mPattern

在您确定在任何时候只有一个用户的每种情况下,都可以将其与 一起使用。Matcherreset


答案 2