このプログラムを見てください:
Pattern p = Pattern.compile("hello");
Matcher m = p.matcher("[a-z]");
System.out.println(m.hitEnd()); // prints false
System.out.println(m.find()); // prints false
System.out.println(m.hitEnd()); // prints true
m.hitEnd()
戻り値の最初の呼び出しに注意してくださいfalse
。JavaDocを見てください、それは言います:
このマッチャーによって実行された最後の一致操作で検索エンジンが入力の終わりに到達した場合、trueを返します。
ここではfalse
、の呼び出しの前に呼び出されm.find()
、マッチャーはまだ一致操作を実行していないため、を返します。それの呼び出しがm.find()
戻った後true
(find()
完全な入力文字列を消費し、最後に到達するため)。その意味はJavaDocでも説明されています。
このメソッドがtrueを返す場合、より多くの入力が最後の検索の結果を変更した可能性があります。
これがtrueを返す場合、マッチャーが入力の最後にヒットしたことを意味します。この場合、ヒットとは一致せずに到達したことを意味します。(入力はマッチャーによって完全に消費されました)。
編集
[a-z]
正規表現の入力文字列であるあなたがそれを望んでいることを願っていますが、その逆でhello
はありません。あなたが持っていた場合
Pattern p = Pattern.compile("[a-z]"); // The regex needs to be compiled.
Matcher m = p.matcher("hello"); // The input is given to the matcher
while (m.find()) { // In this case, returns true 5 times
System.out.println(m.group() + ", ");
}
あなたの出力は
h, e, l, l, o,