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

信じられないほどの数の試合をしますか?compile()、g、i、mのGWT実装で許可されているさまざまな修飾子を使用してテストしました。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

空の文字列は regex に一致するため、 regExp.exec("")withRegExp.compile("^$")は決して返されません。これは、 「行/文字列の先頭と末尾の間に何もありません」と読み取ります。null""^$

だからあなたwhileは無限ループです。

また、印刷するのは

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

...しかし、おそらく使いたかった

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

textbox が空かどうかをチェックする GWTも参照してください。

于 2012-07-03T13:11:24.547 に答える