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?