online - Java Pattern Matcher: crear nuevo o restablecer?
regex java 8 (1)
Por todos los medios reutilizar el Matcher
. La única buena razón para crear un nuevo Matcher
es garantizar la seguridad de subprocesos. Es por eso que no crea un public static Matcher m
; de hecho, esa es la razón por la que, en primer lugar, existe un objeto de fábrica de Pattern
separado y seguro para subprocesos.
En cada situación en la que esté seguro de que solo hay un usuario de Matcher
en cualquier momento, está bien reutilizarlo con el reset
.
Supongamos una Regular Expression
, que, a través de un objeto de Java Matcher
, se compara con un gran número de cadenas:
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 , uno encuentra la opción de reutilizar el mismo objeto Matcher
, a través del método reset(CharSequence)
, que, como muestra el código fuente, es un poco menos costoso que crear un nuevo Matcher
cada vez, es decir , a diferencia de lo anterior, uno 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
}
}
¿Debería uno usar el patrón de reset(CharSequence)
anterior, o debería preferir inicializar un nuevo objeto Matcher
cada vez?