当前位置: 首页 > 知识库问答 >
问题:

重置a。nextLine()扫描仪

娄学文
2023-03-14

在Java方面,我是一个业余爱好者,所以请原谅我的问题,如果它看起来很愚蠢:-P我有以下代码,旨在计算文件中的行数:

while (scanNumOfLines.hasNextLine())    
    {
    NumOfLines ++;
    scanNumOfLines.nextLine();
    }
    System.out.println("NumOfLines = "+NumOfLines);

所以它很好,但我想将扫描仪重新用于其他目的,但nextLine已移动到文件的最后一行,我想将其重置回第一行。

(取而代之的是,我不得不使用另一台扫描仪来实现另一个目的,而在我看来,这似乎没有它应有的优雅。)

我肯定肯定有一种扫描仪方法可以将计数器重置为零?

谢谢

CJ

共有3个答案

充小云
2023-03-14

我意识到这已经得到了回答,但如果我正在查找这些东西,我肯定其他人也是,所以我想我应该贡献我解决这个问题的方式:由于我的问题需要我根据用户输入多次读取文件,我的测试类有一个读取文件的扫描仪ArrayList,然后在不再需要它时自行删除。我设置它的方式是ArrayList中永远不会超过1个扫描仪,但ArrayList在添加和删除对象方面很有用。

public class TxtReader {
     private boolean PROGRAM_CONTINUES = true;
     private final int indexCount = 0;
     File newFile = new File("Reader Example.txt");
     ArrayList<Scanner> scanList = new ArrayList<Scanner>();

     public TxtReader(Scanner UserInput) throws FileNotFoundException {
         while(PROGRAM_CONTINUES) {
              if (UserInput.next().equalsIgnoreCase("end")) { 
          // some arbitrary way of concluding the while loop
                  PROGRAM_CONTINUES = false;
                  break;
              }
              scanList.add(new Scanner(newFile));
          // DO STUFF*********************************************
              while(scanList.get(indexCount).hasNext()) {
                 System.out.println(scanList.get(indexCount).nextLine());
             }
          //******************************************************
              scanList.get(indexCount).close(); 
          //always close a scanner after you're done using it
              scanList.remove(indexCount); // removes the now-unnecessary scanner 
              UserInput = new Scanner(System.in);
        }
    }
    public static void main(String[] args) throws FileNotFoundException {
        new TxtReader(new Scanner(System.in));
    }
}
严恩
2023-03-14

您必须重新声明Scanner。当您调用nextLine()时,该行将从缓冲区中删除并有效地从Scanner中丢弃。

因此,本质上,有一种方法可以做到这一点:它是构造函数。

Scanner scanNumOfLines = new Scanner(myFile);

扫描仪对象中没有“计数器”。相反,把它想象成一条传送带。皮带不知道或不关心上面有什么。它只是不停地朝你吐东西,而上面还有东西。一旦你拿走了它们,它们就永远消失了。

梁福
2023-03-14

这是不可能做到的。

不包含它的原因是它支持广泛的输入类型。一个例子是流。这些在传递结果后不存储结果,因此它们不支持重置。

因此,最好的方法是创建一个新的扫描仪。如果为其提供许多自定义设置,请创建一个factory方法。

 类似资料:
  • 一段时间以来,我一直在做一个作为拼字字典的编程作业。该程序接受用户的输入,并输出一个包含单词列表的文件,这取决于用户从菜单中请求的内容。我遇到的问题与Scanner.nextLine()有关。 我不是很清楚为什么,但由于某种原因,有时我必须按一次enter键,然后我的代码才会接受我的输入并将其存储为变量。本质上,我最终输入了两次输入。我尝试在代码周围插入Scanner.nextLine()以“占用

  • 我有两个do-while循环用于进行自定义输入验证。问题是它会自动进入下一个do while循环。正确插入名称后,我必须放置一个新的下一行():name=scanner。nextLine() 我知道当光标停留在那里时,nextLine()会出现“小故障”,您必须调用nextLine()才能继续。资料来源:https://www.geeksforgeeks.org/why-is-scanner-sk

  • 这是我使用的代码: 但当它到达这一点时,它只会说“创建一个名称”。和“创建密码”。两个都在同一时间,然后我必须打一些东西。所以它基本上跳过了需要键入字符串的扫描器部分。在“创建名称”之后。和“创建密码”。然后输入,名称和密码都改为我输入的内容。我怎么解决这个? 这是全班学生。我只是在测试,所以它实际上不是一个程序: 抱歉我语法不好。我不是英国人,所以我很难解释。

  • < b >想改进这个问题?更新问题,以便通过编辑此帖子用事实和引用来回答问题。 我知道使用nextInt()方法不会消耗新行字符,所以为了处理这个问题,我需要使用一个空的nextLine()方法继续。 我的问题是,作为一种替代解决方案,程序是否会对任何类型的运行时错误开放以使用两个扫描仪,一个用于字符串输入,一个用于整数? 感谢您的任何帮助! (经过编辑,因此问题不那么主观)

  • 我想读取一个文本文件,并将每一行放入一个字符串(字符串数组)。然而,这需要扫描文件两次,一次是为了找出有多少行,另一次是为了创建一个这样大小的字符串数组。但它抛出了一个错误,重置方法似乎不起作用。 这是相关的代码片段。