PNS*_*PNS 21 java regex matcher reset
假设a 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
}
}
Run Code Online (Sandbox Code Playgroud)
在Java SE 6 JavaDoc for Matcher中,可以Matcher
通过该reset(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
}
}
Run Code Online (Sandbox Code Playgroud)
应该使用reset(CharSequence)
上面的模式,还是应该Matcher
每次都初始化一个新对象?
Mar*_*nik 28
一定要重用Matcher
.创建新的唯一好理由Matcher
是确保线程安全.这就是为什么你不做public static Matcher m
- 事实上,这就是Pattern
首先存在一个单独的,线程安全的工厂对象的原因.
在您确定Matcher
任何时间点只有一个用户的情况下,可以重复使用它reset
.