有没有办法不用扫描仪(Java)前进一条线



好的,所以我在扫描仪前进多行时遇到了一个小问题。我有一个文件,其中有许多行包含整数,每个行由一个空格分隔。文件中的某处有一行没有整数,只有单词"done"。 找到完成后,我们退出循环并打印出小于每行中每个给定整数的最大素数(如果整数已经是素数,则不对它执行任何操作)。我们一直这样做,直到"完成"的行。

我的问题:假设文件包含 6 行,第 6 行是单词 done。我的输出将跳过第 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(" "); 

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

问题是你有 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();
}

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

我想你正在寻找这个

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 
}
}