Боюсь, ваш код уже выглядит довольно эффективно.
Вот моя версия:
Matcher match = Pattern
.compile("(\\w+)\\s+\"(\\d+\\.\\d+\\.\\d+\\.\\d+)\"")
.matcher(lineInFile);
while(match.find()) {
//do something
}
Есть две микрооптимизации:
- Нет необходимости хранить шаблон в дополнительном
переменная, встраиваемая что
- Для псевдонима, поиск слова
символы, а не пробелы
На самом деле, если вы выполняете много подобной обработки, и шаблон никогда не меняется, вы должны сохранять скомпилированный шаблон постоянным:
private static final Pattern PATTERN = Pattern
.compile("(\\w+)\\s+\"(\\d+\\.\\d+\\.\\d+\\.\\d+)\"");
Matcher match = PATTERN.matcher(lineInFile);
while(match.find()) {
//do something
}
Обновление: я потратил некоторое время на RegExr , чтобы придумать гораздо более конкретный шаблон, который должен определять только действительные IP-адреса в качестве бонуса. Я знаю, что это чертовски уродливо, но я предполагаю, что это довольно эффективно, так как устраняет большую часть возврата:
([A-Z]+)\s*\"((?:1[0-9]{2}|2(?:(?:5[0-5]|[0-9]{2})|[0-9]{1,2})\.)
{3}(?:1[0-9]{2}|2(?:5[0-5]|[0-9]{2})|[0-9]{1,2}))
(Обернутый для удобства чтения, все обратные слэши необходимо экранировать в java, но вы можете протестировать его на RegExr, как и в тестовой строке OP) *