java.util.Scanner#findInLine(String)の埋め込みフラグ

気になったので調べてみた。
まずはこれ。

Scanner scanner = new Scanner("\n");
String result = scanner.findInLine("(?s).*");
System.out.print(result);
#java5-> (改行が表示される)
#java6-> (改行が表示されない)

これを実行するとJava5とJava6で結果が違う。Java6では埋め込みフラグが適用されないみたいだ。
んで次はこれ。ScannerではなくてPatternを試してみた。

Pattern pattern = Pattern.compile(".*", Pattern.DOTALL);
Matcher matcher = pattern.matcher("\n");
System.out.println(matcher.matches());
#-> true

Pattern pattern = Pattern.compile(".*");
Matcher matcher = pattern.matcher("\n");
System.out.println(matcher.matches());
#-> false

5でも6でも同じ結果になる。そしてPetternで埋め込みフラグを使ってみる。

Pattern pattern = Pattern.compile("(?s).*");
Matcher matcher = pattern.matcher("\n");
System.out.println(matcher.matches());
#-> true

見事に両方ともtrueになる。ということで、Scannerクラスに問題があるみたいだ。
というところまでは分かった。...。で、どうしよう?
Netbeans と書けばJavaの凄い人に見てもらえるかもしれないので書いておく。。。

      • -

追記:
Sun の片貝さんにバグレポートしていただきました。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6513038
ありがとうございます。

      • -

追記:2007年03月13日
解決したみたいです。バグではなかったみたいです。
このケースでは、
Scanner.findWithinHorizon("(?s).*", 0)
を使うとよろしいみたいですね。
あらためて、片貝さんに感謝ですm(_ _)m