MatcherクラスのfindをEclipseでデバックする時の注意点

やること

MatcherクラスのfindをEclipseでデバックできないのを再現
原因を突き止めることはやってない

Let's 再現

java.util.regex.Matcherのfindメソッドをデバックします。

デバックで使用するのはEclipseのExpressionsです。

試しにこんなコードをデバックしますよ。

Matcher matcher = Pattern.compile(regex).matcher(input);

int i = 0;
while (matcher.find()) {
System.out.println("ループ" + ++i + "回目です。");
}

例えば

String regex = "no[0-9]"
String input = "no0/no1/No2/no3"

としてみましょう。正規表現で一致する no0,no1,no3 なので3回ループが実行されます。
その時の出力は、次のようになります。

ループ1回目です。
ループ2回目です。
ループ3回目です。

それでは今回のテーマ、デバックをしてみます。
一回目は、期待通りに成功するパターンをやります。

variablesを見ながらステップオーバで検証

ループ1回目です。
ループ2回目です。
ループ3回目です。
問題ない。


もう一度。
今度は、失敗するパターンです。
Expressionsでmatcher.find()の値を監視した状態でステップオーバで検証
一度もループに入ること無く失敗。

原因はわかりませんでしたが、デバックするときは気をつけて下さい。