¿Hay un método incorporado? No que yo sepa. Sin embargo, debería ser bastante fácil hacerlo usted mismo. Aquí hay un código, no está comprobado que debe darle la idea básica:
import java.util.regex.Pattern;
import java.util.ListIterator;
import java.util.ArrayList;
/**
* Finds the index of all entries in the list that matches the regex
* @param list The list of strings to check
* @param regex The regular expression to use
* @return list containing the indexes of all matching entries
*/
List<int> getMatchingIndexes(List<String> list, String regex) {
ListIterator<String> li = list.listIterator();
List<int> indexes = new ArrayList<int>();
while(li.hasNext()) {
int i = li.nextIndex();
String next = li.next();
if(Pattern.matches(regex, next)) {
indexes.add(i);
}
}
return indexes
}
que podría tener el uso de patrones y ListIterator partes un poco mal (nunca he utilizado tampoco), pero que debe dar la idea básica. También podría hacer un bucle simple for en lugar del bucle while sobre el iterador.
No se puede mejorar el rendimiento si pon tus cuerdas en una lista. ¿Tu expresión regular siempre es un prefijo, o quieres manejar alguna expresión regular? – erickson
Entonces, ¿qué estructura de datos debo usar? Mi expresión regular siempre es un prefijo. – kmilo
Recomiendo cierta estructura de datos de autómatas. https://en.wikipedia.org/wiki/Trie –