Java Регулярное выражение байт за байтом

Я ищу способ постепенного применения шаблона регулярного выражения, то есть я ищу совпадение, которое я могу обновлять с помощью символов по мере их поступления и которое сообщает мне по каждому символу, совпадает ли он по-прежнему или нет.

Вот иллюстрация в коде (MagicMatcherIAmLookingFor это то, что я ищу, characterSource это то, что я могу запросить нового персонажа, скажем, InputStreamReader в этом отношении):

final Pattern pattern = Pattern.compile("[0-9]+");
final MagicMatcherIAmLookingFor incrementalMatcher = pattern.magic();
final StringBuilder stringBuilder = new StringBuilder();
char character;
while (characterSource.isNotEOF()) {
    character = characterSource.getNextCharacter();
    incrementalMatcher.add(character);
    if (incrementalMatcher.matches()) {
        stringBuilder.append(character);
    } else {
        return result(
             stringBuilder.toString(),
             remaining(character, characterSource)
        );
    }
}

Я не нашел способ использовать существующий java.util.regex.Pattern так, но, может быть, я просто не нашел его. Или есть альтернативная библиотека встроенным регулярным выражениям, которая предоставляет такую ​​возможность?

Мне не повезло, что он искал в Интернете - все результаты полностью завалены тем, как использовать регулярные выражения java.

Я нацеливаюсь на Java 8+

1 ответ

Это тот тип объекта, который вы ищете?

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class MagicMatcher {

    private Pattern pattern;
    private Matcher matcher;
    private String stringToCheck;

    public MagicMatcher(Pattern p , String s) {
        pattern = p;
        stringToCheck = s;
        updateMatcher();
    }

    public boolean matches() {
        return matcher.matches();
    }

    private void updateMatcher() {
        matcher = pattern.matcher(stringToCheck);
    }

    public void setStringToCheck(String s) {
        stringToCheck = s;
        updateMatcher();
    }

    public String getStringToCheck() {
        return stringToCheck;
    }

    public void addCharacterToCheck(char c) {
       stringToCheck += c;
       updateMatcher();
    }

    public void addStringToCheck(String s) {
        stringToCheck += s;
        updateMatcher();
    }

}
Другие вопросы по тегам