Основным источником ввода для java.util.Scanner
является java.lang.Readable
. Помимо конструктора Scanner(File)
, Scanner
не знает и не заботится о том, что он сканирует файл.
Кроме того, поскольку это регулярное выражение, основанное на java.util.regex.*
, оно не может сканировать назад.
Чтобы выполнить то, что вы хотите сделать, лучше всего сделать это на уровне источника ввода, например. с помощью InputStream.skip
исходного кода перед передачей его конструктору Scanner
.
On Scanner.skip
Scanner
сам имеет skip
, а такой шаблон, как "(?s).{10}"
, будет пропускать 10 символов (в (?s)
однострочном/Pattern.DOTALL
), но это, возможно, довольно окольный способ сделать это.
Вот пример использования skip
для пропуска заданного количества строк.
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());
}
Это печатает (как видно на ideone.com):
Line5 bleh
Line6 bloop
person
polygenelubricants
schedule
17.06.2010