Основным источником входного сигнала для java.util.Scanner
является java.lang.Readable
.Помимо конструктора Scanner(File)
, Scanner
не знает и не заботится о том, что он сканирует файл.
Кроме того, поскольку это регулярное выражение основано на java.util.regex.*
, он не может сканировать в обратном направлении.
Чтобы выполнить то, что вы хотите сделать, лучше всего сделать это на уровне входного источника, например, используя InputStream.skip
источника перед передачей его конструктору Scanner
.
Вкл. 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