作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设一个正则表达式
,它通过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
重复使用它.
关于Java 模式匹配器 : create new or reset?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11391337/
我是一名优秀的程序员,十分优秀!