【问题标题】:Unable to read whole file, reads just one line无法读取整个文件,只读取一行
【发布时间】:2014-06-11 19:13:18
【问题描述】:
while(reader.hasNextLine()){
    String s = reader.nextLine();
    String[] tokens = s.split(" ");

    while(t < tokens.length){
        a = 0;

        while( a < 6 ) {
            if(tokens[t].equals(d[a])){
                System.out.println("found keyword -> " + tokens[t]);
                files = 1;
            }
            a++;
        }

        p = 0;

        while( p < 2 ) {
            if(tokens[t].equals(xyz[p])){
                System.out.println("found token -> " + tokens[t]);
                files2 = 1;
            }
            p++;
        }
        if (files2 == 0 && files == 0){
            System.out.println("found identifier -> " + tokens[t]);
        }

        files = 0;
        files2 = 0;
        t++;
    }

    reader.close();
}

前几天我发布了类似的内容,但是 while 循环没有修复它。有人可以帮我解决这个问题。问题是它不会读取整个文件,而只会读取一行,即第一行。我不知道我在诚实地做什么。谢谢。

【问题讨论】:

  • 从您的格式中很难看出,reader 是在 while 循环之前还是之后关闭的?
  • 你到底在哪里定义t?您的代码只是开始使用它而无需定义/分配它。
  • 好吧,马克,我已经定义了变量,但我只是发布了需要工作的代码的必要部分。
  • 你应该认真学习使用调试器。
  • 此外,实际上没有必要使用扫描仪读取一行,然后将其拆分。 扫描器类使用分隔符。您只需调用while(scanner.hasNext()) { scanner.next() };,它就会一次只为您提供一个单词,用空格分隔。

标签: java token


【解决方案1】:

您似乎在 while 循环内关闭了您的阅读器 (reader.close();)。

正如刚才提到的@rlinden,一定要重置你的循环变量。如果您目前拥有reader.close();,请确保将t = 0; 设置为下一个循环,或者采纳@user184994 的明智建议。

无论哪种方式,您都需要将 reader.close(); 移到(下方)最外层的 while 循环之外。

此块上方是否缺少更多代码?这可能会对阅读器的运作方式产生重大影响。请在第一个代码块下方发布您的新/编辑代码,以便我可以看到任何新问题在哪里。用标签标记它们更新:

如果可能,我会注意修改并提供更多建议。

【讨论】:

    【解决方案2】:

    我相信问题在于你在里面 while 之后没有重置 t。尝试包含该行

    t=0;
    

    在内部循环之前。

    我没有调试您的代码,但我假设如果第一行的标记数等于或大于第二行,则在读取第二行时 t 已经等于 tokens.length。

    希望对你有帮助。

    【讨论】:

    • 宾果游戏!工作 100%。您能否进一步解释为什么这解决了这个问题?我很想学习,谢谢。
    • 您最好的理解方式是使用调试器,这样您就可以随着程序的进行跟踪变量的值。我用笔和纸(我们巴西人称之为“中国方法”)做到了这一点,并意识到变量 t 将保持内部循环执行之间的值。
    【解决方案3】:

    正如其他人所提到的,reader.close(); 调用位于 while(reader.hasNextLine()) 循环内。这导致阅读器在读取第二行之前关闭。将其移到最外层循环之外(即在下一行的} 之后)。然后解决变量t 未设置/重置的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2015-10-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 2012-10-13
      • 2013-05-15
      相关资源
      最近更新 更多