Digamos que tengo una cadena que contiene esto:
HelloxxxHelloxxxHello
Recopilo un patrón para buscar 'Hola'
Pattern pattern = Pattern.compile("Hello");
Matcher matcher = pattern.matcher("HelloxxxHelloxxxHello");
Debería encontrar tres coincidencias. ¿Cómo puedo contar cuántas coincidencias hubo?
Probé varios bucles y usé el matcher.groupCount()
pero no funcionó.
Respuestas:
matcher.find()
no encuentra todas las coincidencias, solo la siguiente .Solución para Java 9+
Solución para Java 8 y versiones anteriores
Tendrá que hacer lo siguiente. ( A partir de Java 9, hay una mejor solución )
Por cierto,
matcher.groupCount()
es algo completamente diferente.Ejemplo completo :
Manejo de coincidencias superpuestas
Al contar las coincidencias de
aa
enaaaa
el fragmento anterior, obtendrá 2 .Para obtener 3 coincidencias, es decir, este comportamiento:
Debe buscar una coincidencia en el índice de la
<start of last match> + 1
siguiente manera:fuente
while(matcher.find()){ matcher.region(matcher.end()-1, str.length()); count++; }
Esto debería funcionar para coincidencias que podrían superponerse:
fuente
Desde Java 9, puede utilizar la secuencia proporcionada por
Matcher.results()
fuente
Si desea utilizar secuencias de Java 8 y es alérgico a los
while
bucles, puede probar esto:Descargo de responsabilidad: esto solo funciona para coincidencias disjuntas.
Ejemplo:
Esto imprime:
Esta es una solución para coincidencias disjuntas con transmisiones:
fuente
Use el siguiente código para encontrar el número de coincidencias que la expresión regular encuentra en su entrada
Sin embargo, este es un código generalizado, no específico, adáptelo a sus necesidades
No dude en corregirme si hay algún error.
fuente