0

我正在寻找一种增量应用正则表达式模式的方法,即我正在寻找一个匹配器,我可以在输入字符时对其进行更新,并在每个字符上告诉我它是否仍然匹配。

这是代码中的一个插图(这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+

4

1 回答 1

0

这是您正在寻找的对象吗?

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();
    }

}
于 2018-05-28T16:00:18.543 回答