【问题标题】:How to avoid resetting the java Scanner position如何避免重置 java Scanner 位置
【发布时间】:2012-04-17 16:01:03
【问题描述】:

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

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

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

有什么想法会导致这种情况吗?我这样做是否正确?

谢谢

一些附加信息:

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

德里克

【问题讨论】:

  • 输入是什么样的?扫描仪是如何实例化的(分隔符是什么)?请不要发布“或多或少像这样”的代码——发布实际代码。
  • 扫描器是从 InputStream 中实例化的。输入只是普通的 ascii 文本。定界符没有改变,对这些函数尤其重要。
  • 无论如何,您必须发布一些导致失败的示例输入。
  • 什么是“dibug sine”调试?什么是HearCharBuffer
  • 它们显然是拼写错误。 Brian 解决了我的问题,不需要样本数据。

标签: java regex java.util.scanner


【解决方案1】:

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

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

【讨论】:

  • 感谢您的正确回答。我不确定为什么这个问题被否决了。我猜仇恨者会讨厌
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多