Java Pattern Matcher: créer nouveau ou réinitialiser?
Supposons un Regular Expression
, qui, via un objet Java Matcher
, est mis en correspondance avec un grand nombre de chaînes:
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
}
}
Dans le Java SE 6 JavaDoc pour Matcher, on trouve la possibilité de réutiliser le même Matcher
objet, via la méthode reset(CharSequence)
, qui, comme le montre le code source, est un peu moins cher que de créer un nouveau Matcher
à chaque fois, c'est-à-dire, contrairement à ce qui précède, on pourrait faire:
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
}
}
Faut-il utiliser le modèle reset(CharSequence)
ci-dessus, ou devraient-ils préférer initialiser un nouvel objet Matcher
chaque de temps?
1 answers
Par tous les moyens réutiliser le Matcher
. La seule bonne raison de créer un nouveau Matcher
est d'assurer la sécurité des threads. C'est pourquoi vous ne faites pas un public static Matcher m
-en fait, c'est la raison pour laquelle un objet factory Pattern
séparé et sans thread existe en premier lieu.
Dans chaque situation où vous êtes sûr qu'il n'y a qu'un seul utilisateur de Matcher
à tout moment, il est correct de le réutiliser avec reset
.