Я пытаюсь улучшить производительность некоторого кода. Это выглядит примерно так:Как определить, является ли строка не регулярным выражением?
public boolean isImportant(String token) {
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
То, что я заметил, что многие из шаблонов кажутся простыми строковые литералы, не имеющие регулярных выражений конструкций. Поэтому я хочу, чтобы просто хранить их в отдельном списке (importantList) и сделать проверку равенства вместо выполнения более дорогой матч шаблон, например, следующим образом:
public boolean isImportant(String token) {
if (importantList.contains(token)) return true;
for (Pattern pattern : patterns) {
return pattern.matches(token).find();
}
}
Как программно определить, является ли конкретная строка не содержит конструкции регулярных выражений?
Редактировать: Я должен добавить, что ответ не обязательно должен быть чувствительным к характеристикам. (т. е. можно использовать регулярные выражения). В основном я занимаюсь производительностью isImportant(), потому что он называется миллионы раз, а инициализация шаблонов выполняется только один раз.
Не выполнял бы регулярное выражение в строке, чтобы определить, является ли это регулярным выражением каждый раз намного хуже, чем просто использовать каждую строку в качестве регулярного выражения? –
@MikeM: Это не то, что он спрашивает. 'hello' - отлично действующее регулярное выражение. –
Невозможно (по крайней мере, не легко или стоит, если вы не найдете какой-либо шаблон в простых строковых литералах). Простой строковый литерал является допустимым шаблоном регулярного выражения. – AC1