asumir una Regular Expression
, que, a través de un objeto de Java Matcher
, se compara con un gran número de cadenas:Java Pattern Matcher: crear nuevo o reiniciar?
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
}
}
En el Java SE 6 JavaDoc for Matcher, se encuentra la opción de volver a utilizar el mismo Matcher
objeto, a través del método reset(CharSequence)
, que, como el código fuente muestra, es un poco menos caro que la creación de un nuevo Matcher
cada vez, es decir, a diferencia de antes, se podría hacer:
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
}
}
Debe uno utilizar el patrón de reset(CharSequence)
arriba, o deberían preferir inicializar un nuevo objeto Matcher
cada vez?
Por favor, reutilice el 'Matcher'. La única buena razón para crear un nuevo 'Matcher' es garantizar la seguridad del hilo. Es por eso que no se hace un 'Matcher m' público estático --- de hecho, esa es la razón por la cual existe una clase 'Patrón' separada en primer lugar. –
Por lo tanto, para aplicaciones de subproceso único incluso como una variable de instancia o de clase, o para subprocesos múltiples en los que se crea el objeto Matcher dentro de un método, restablecer() está bien, ¿sí? – PNS
@MarkoTopolnik: Creo que separar la compilación de la expresión regular de su aplicación es otra buena razón para tener una clase 'Pattern'. –