The underlying input source for a java.util.Scanner
is a java.lang.Readable
. Beyond the Scanner(File)
constructor, a Scanner
neither knows nor cares of the fact that it's scanning a file.
Also, since it's regex based on java.util.regex.*
, there's no way it can scan backward.
To accomplish what you want to do, it's best to do it at the input source level, e.g. by using InputStream.skip
of the source before passing it to the constructor of Scanner
.
On Scanner.skip
Scanner
itself does have a skip
, and a pattern like "(?s).{10}"
would skip 10 characters (in (?s)
single-line/Pattern.DOTALL
mode), but this is perhaps a rather roundabout way of doing it.
Here's an example of using skip
to skip a given number of lines.
String text =
"Line1 blah blah\n" +
"Line2 more blah blah\n" +
"Line3 let's try something new \r\n" +
"Line4 meh\n" +
"Line5 bleh\n" +
"Line6 bloop\n";
Scanner sc = new Scanner(text).skip("(?:.*\\r?\\n|\\r){4}");
while (sc.hasNextLine()) {
System.out.println(sc.nextLine());
}
This prints (as seen on ideone.com):
Line5 bleh
Line6 bloop