2

有人可以解释为什么这个片段:

// import com.google.gwt.regexp.shared.MatchResult;
// import com.google.gwt.regexp.shared.RegExp;

RegExp regExp = RegExp.compile("^$");
MatchResult matcher;
while ((matcher = regExp.exec("")) != null)
{
    System.out.println("match " + matcher);
}

给出令人难以置信的比赛数量?我使用 GWT 的compile()、 g、 i 和 m 实现允许的不同修饰符进行了测试。它仅适用于 m(多行)。我只想检查空字符串。

[编辑] 新方法

private ArrayList<MatchResult> getMatches(String input, String pattern)
{
    ArrayList<MatchResult> matches = new ArrayList<MatchResult>();
    if(null == regExp)
    {
        regExp = RegExp.compile(pattern, "g");
    }
    if(input.isEmpty())
    {
        // empty string : just check if pattern validate and
        // don't try to extract matches : it will resutl in infinite
        // loop.
        if(regExp.test(input))
        {
            matches.add(new MatchResult(0, "", new ArrayList<String>(0)));
        }
    }
    else
    {
        for(MatchResult matcher = regExp.exec(input); matcher != null; matcher = regExp
                .exec(input))
        {
            matches.add(matcher);
        }
    }
    return matches;
}
4

1 回答 1

3

你的regExp.exec("")withRegExp.compile("^$")永远不会返回null,因为空字符串""是 regex 的匹配项^$,它显示为"nothing between beginning and end of line/string"

所以你while是无限循环。

另外,你打印的是

System.out.println("match " + matcher);

...但您可能想使用

System.out.println("match " + matcher.getGroup(0));

另请参阅GWT 检查文本框是否为空

于 2012-07-03T13:11:24.547 回答