gpt4 book ai didi

Java 模式匹配器 : create new or reset?

转载 作者:IT老高 更新时间:2023-10-28 20:52:48 25 4
gpt4 key购买 nike

假设一个正则表达式,它通过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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com