Angenommen, ein Regular Expression
, die über ein Matcher
Objekt Java, gegen eine große Anzahl von Saiten abgestimmt ist:Java Pattern Matcher: neu erstellen oder zurücksetzen?
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
}
}
Im Java SE 6 JavaDoc for Matcher findet man die Möglichkeit, das gleiche Matcher
Objekt Wiederverwendung über die reset(CharSequence)
Methode, die, wie der Quellcode zeigt, ist ein bisschen weniger teuer als eine neue Matcher
jedes Mal zu schaffen, das heißt, im Gegensatz zu oben, könnte man tun:
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
}
}
man das reset(CharSequence)
Muster verwenden sollten ob oder ob sie es vorziehen, jedes Mal ein neues Matcher
Objekt zu initialisieren?
Verwenden Sie auf alle Fälle den 'Matcher'. Der einzige gute Grund, einen neuen "Matcher" zu erstellen, ist die Gewährleistung der Sicherheit. Das ist der Grund, warum du keinen "statischen statischen Matcher m" machst - in der Tat, das ist der Grund, warum eine separate "Pattern" -Klasse überhaupt existiert. –
Also, für Singlethread-Anwendungen sogar als Instanz oder Klassenvariable, oder für Multithreaded-Anwendungen, in denen das Matcher-Objekt innerhalb einer Methode erstellt wird, ist reset() in Ordnung, ja? – PNS
@MarkoTopolnik: Ich denke, die Compilierung der Regex von der Anwendung zu trennen ist ein weiterer guter Grund, eine 'Pattern'-Klasse zu haben. –