私はこの種のパターンを持つファイルを読んでいます:(section1, section2, section3) ...
しかし、フォーマットは保証されません。つまり、1つのセクションを別々の行に、多くのセクションを1行に扱わなければならないということです。また、各トークンのオフセットも保存する必要があります。JavaのMatcherは、whileループのマッチャの動作ですか?
`define a global matcher
while() {
readSection1(matcher, other parameters);
readSection2(matcher, other parameters);
readSection3(matcher, other parameters);
}
あなたは私は私が停止した場所から開始することができますので、この正規表現を渡すためにしようとしていることがわかります。だから私はそれがオフセットとトークンを与えるためのMatcherを使用して、このようなコードを実行していますよ。しかし、今私は問題があります。私の最後のreadSection3メソッドが終了した後、私はマッチャーが最後を叩いていないことをテストしたので、私は読書の新しいラウンドを開始しました。 しかしwhileループに再び入り、私のreadSection1メソッドにmatcherを渡すと、突然matcherが終了しました!なぜそれが起こるだろうか?
は私も少しテストを実行します。
String loop = "a b c d e f g h i j k l";
Matcher loopMatcher = Pattern.compile("\\S+").matcher(loop);
boolean loopEnded = false;
while (!loopEnded) {
use(loopMatcher);
if (loopMatcher.hitEnd()) {
loopEnded = true;
}
}
public static void use(Matcher matcher) {
if (!matcher.find()) {
System.out.println("loop not ended but matcher hit end");
}
}
は、それはあまりにも、エラーメッセージを出力します。なぜ?!
さて、奇妙なことが起きましたが、私はこの小さなプログラムをもう一度実行しますが、エラーはなくなりましたが、まだ大きなプログラムに入っています。
おそらく私はこれをうまく説明しなかったでしょう。私は実際にスキャナを使って行を操作していますが、実際にはクラスセクションはありません。パターンはS1、S2、S3、S1、S2、S3です。私のreadSection3()が終了すると、次のループに入り、次のS1があればそれを読み込むはずです。したがって、最後のS3と次のS1が同じ行にある場合、私はどこから停止する必要があります。だから私は最後のS3の最後のトークンにとどまるはずだったので、私はMatcherを通過しているのです。そして、次のループに入り、readSection1()を呼び出すと、matcher.find()が呼び出され、section1に属する次のトークンが見つかるはずです。 – HM9527
私のコードに誤字があります。今すぐ実行する必要があります。しかし、私はもう一度それを実行しようとすると、すべてが良い???????私はグローバルマッチャーでこれを修正しました!!!分???? ???? – HM9527
しかし、私が固定版を使用しないと、私の他のプログラムはまだ間違っています...うーん、私はこれを再び歩かせてください。 – HM9527