你可以将扫描仪跳到文件中的位置或向后扫描吗?

Mik*_*ike 4 java java.util.scanner

我有一个非常大的文本文件,我需要从最近的某个地方收集数据.也许Scanner并不是最好的方法,但是在获取我感兴趣的文件部分之前从顶部开始并抓住6000行是非常浪费的.有没有办法告诉Scanner跳转到比如文件的7/8或从底部开始向上扫描并逐行抓取?

谢谢

pol*_*nts 5

a的基础输入源java.util.Scanner是a 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());
    }
Run Code Online (Sandbox Code Playgroud)

打印(如ideone.com上所示):

Line5 bleh
Line6 bloop
Run Code Online (Sandbox Code Playgroud)