有没有办法绕着扫描仪(Java)推进一条线

问题描述 投票:0回答:2

好的,所以我在扫描仪推进额外线路方面遇到了一些问题。我有一个文件,其中有许多行包含整数,每个整数由一个空格分隔。在文件的某个地方有一行没有整数,只有“完成”这个词。当找到完成后,我们退出循环并打印出最大的整数,该整数小于每行中的每个给定整数(如果整数已经为prime,则不执行任何操作)。我们一直这样做直到“完成”这一行。

我的问题:让我们说文件包含6行,在第6行是完成的单词。我的输出将跳过第1,3和5行。它只返回第2行和第4行的正确值。

这是一段代码,我在其中读取了以下值:

Scanner in = new Scanner(
                new InputStreamReader(socket.getInputStream()));
        PrintStream out = new PrintStream(socket.getOutputStream());

        while(in.nextLine() != "done"){


            String[] arr = in.nextLine().split(" "); 

现在我感觉问题是我的循环中的nextLine调用使行前进,然后nextline.split调用也使该行前进。因此,所有奇数行都将丢失。是否有另一种方法来检查“完成”而不提前行或是否有可能的命令我可以调用以某种方式将扫描仪重置回到循环的开始?

java io java.util.scanner
2个回答
4
投票

问题是你有2次调用nextLine()尝试这样的事情

String line = in.nextLine();
while (!"done".equals(line)) {
     String[] arr = line.split(" ");

     // Process the line

     if (!in.hasNextLine()) {
         // Error reached end of file without finding done
     }

     line = in.nextLine();
}

另请注意我修复了"done"的检查,你应该使用equals()


-1
投票

我想你正在寻找这个

while(in.hasNextLine()){
    String str  = in.nextLine();
    if(str.trim().equals("done"){
        break;
    }else{
        String[] arr = str.split("\\s+");
        //then do whatever you want to do 

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.