-1

我有一些看起来或多或少像这样的代码:

while(scanner.hasNext())
{
    if(scanner.findInLine("Test") !=null) {
    //do some things
    }else{
    scanner.nextLine();
    }
}

我用它来解析一个~10MB 的文本文件。问题是,如果我在 while() 和scanner.nextLine() 上设置断点,我可以看到有时扫描仪位置(在调试窗口中)会回到零。我认为这导致我某种循环爆炸,因为 findInLine() 中的正则表达式从零开始,查看一些文本,推进位置,然后它随机设置回零,所以它必须重新- 再次解析所有文本。

有什么想法可能导致这种情况吗?我是否以正确的方式这样做?

谢谢

一些附加信息:

Scanner 是从 InputStream 实例化的。调试后,似乎有一个 Scanner 使用的 HeapCharBuffer,它一次只允许 1024 个字符,然后重置。有没有办法避免这种情况,或者做不同的事情?这似乎是可以扫描的少量字符。

德里克

4

1 回答 1

4

你正在混合Scanner.hasNext()Scanner.nextLine()。不要那样做;他们以不同的方式处理标记化。

hasNext()next()hasNextLine()与一起使用nextLine()

于 2012-04-04T00:45:24.603 回答