代码之家  ›  专栏  ›  技术社区  ›  Mike

你能将扫描仪跳到文件中的某个位置或向后扫描吗?

  •  4
  • Mike  · 技术社区  · 15 年前

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

    谢谢

    3 回复  |  直到 14 年前
        1
  •  5
  •   polygenelubricants    15 年前

    的基础输入源 java.util.Scanner java.lang.Readable . 超越 Scanner(File) 建造师,a Scanner 既不知道也不关心它正在扫描文件的事实。

    java.util.regex.* ,它不可能向后扫描。

    要完成您想做的事情,最好在输入源级别完成,例如使用 InputStream.skip 在将其传递给 .


    Scanner.skip

    它本身确实有一个 skip ,以及类似 "(?s).{10}" 将跳过10个字符(在 (?s) Pattern.DOTALL

    跳过给定的行数。

        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());
        }
    

    as seen on ideone.com ):

    Line5 bleh
    Line6 bloop
    
        2
  •  2
  •   RonK    15 年前

    Scanner InputStream ,您可以使用流的 skip(long) 方法跳过不需要的行,然后开始扫描。

    阅读更多信息 javadoc

        3
  •  2
  •   Ben S    15 年前

    你应该用 RandomAccessFile 相反。