Код: Выделить всё
public LinkedList tokenize() {
// Create a matcher for the input string
Matcher matcher = tokensPattern.matcher(input);
// Create an empty list for the result
LinkedList tokensList = new LinkedList();
// While matches are found, keep looping
while (matcher.find()) {
// Get match
String matchStr = matcher.group();
// Check which token matched to create the apropriate Token object
for(PossibleTokens t : PossibleTokens.values()) {
if (matcher.group(t.name()) != null)
tokensList.add(new Token(t.name(), matchStr));
}
}
// Return list of Tokens
return tokensList;
}
Код работает так, как ожидалось, но мне не очень нравится то, что нужно проверять какая группа совпала, мне нужно просмотреть их все и проверить, какая из них не равна нулю.
Есть ли лучший способ получить совпавшую группу без необходимости перебирать все групп?
Это было бы очень полезно, потому что я планирую расширить количество токенов, которые принимает этот лексер, в будущем. Поэтому проверять каждую группу каждый раз было бы очень неэффективно.
Подробнее здесь: https://stackoverflow.com/questions/790 ... java-regex