Próbuję poprawić wydajność niektórych kodu. Wygląda to mniej więcej tak:Jak ustalić, czy ciąg nie jest wyrażeniem regularnym?
public boolean isImportant(String token) {
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Co zauważyłem jest to, że wiele wzorców wydają się być proste literały łańcuchowe bez regularnych konstruktów ekspresyjnych. Tak, chcę po prostu zapisać je w oddzielnej liście (importantList) i zrobić test równości zamiast przeprowadzania droższej wzór mecz, takich jak następuje:
public boolean isImportant(String token) {
if (importantList.contains(token)) return true;
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Jak programowo określić, czy dany ciąg nie zawiera konstrukcje regularnych wyrażeń?
Edytuj: Należy dodać, że odpowiedź nie musi być wrażliwa na wyniki. (tzn. można używać wyrażeń regularnych) Zajmuję się głównie wydajnością isImportant(), ponieważ jest to nazywane miliony razy, podczas gdy inicjacja wzorców jest wykonywana tylko raz.
Nie robiłbyś regularnego wyrażenia na łańcuchu znaków, aby określić, czy jest to wyrażenie regularne za każdym razem znacznie gorsze niż użycie każdego ciągu jako wyrażenia regularnego? –
@MikeM: Nie o to pyta. 'hello' jest doskonale prawidłowym wyrażeniem regularnym. –
Niemożliwe (przynajmniej nie jest to łatwe lub wartościowe, chyba że znajdziesz wzór w zwykłych literałach ciągów znaków). Prosty łańcuch literowy jest prawidłowym wzorcem regex. – AC1