有没有办法不使用Scanner(Java)推进一行

有没有办法不使用Scanner(Java)推进一行,java,io,java.util.scanner,Java,Io,Java.util.scanner,好的,所以我有一个小问题,扫描仪推进一个额外的线。我有一个文件,其中有许多行包含整数,每个整数由一个空格分隔。文件中的某个地方有一行没有整数,只有“done”一词。 当发现“完成”时,我们退出循环并打印出小于每行中每个给定整数的最大素数整数(如果整数已经是素数,则不做任何处理)。我们一直这样做,直到“完成”一行 我的问题是:假设文件包含6行,第6行是单词done。我的输出将跳过第1、3和5行。它将只返回第2行和第4行的正确值 下面是我在其中读取值的代码片段: Scanner in = new S

好的,所以我有一个小问题,扫描仪推进一个额外的线。我有一个文件,其中有许多行包含整数,每个整数由一个空格分隔。文件中的某个地方有一行没有整数,只有“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(" "); 

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

问题是您有两次调用
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()

问题是您有两个调用
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()

,我想您正在寻找这个问题

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 

    }
}

我想你在找这个

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 

    }
}

使用.hasNextLine scanner方法,而不是使用EADYUP,这将起作用,但是我希望它能够响应单词“done”本身。意思是,我想让它搜索这个词,而不是仅仅去做,然后意识到后面没有一行。希望这是有道理的。“done”是客户端发送到服务器的程序中的一个关键字,用于告诉服务器它已完成发送消息,并且应该关闭。我知道这很愚蠢。请注意,一般来说,您不应该使用
==
来比较
字符串
=。结果可能不是你所期望的。相反,
String#equals
符合人们的普遍意愿。搜索它,有很多问题和答案可以解释这个问题。谢谢你的帮助!是的,这是一个严重的错误。为什么这个标签是“TCP”?请使用.hasNextLine scanner方法,而不是使用可以工作的方法。但是,我希望它能够响应“完成”这个词本身。意思是,我想让它搜索这个词,而不是仅仅去做,然后意识到后面没有一行。希望这是有道理的。“done”是客户端发送到服务器的程序中的一个关键字,用于告诉服务器它已完成发送消息,并且应该关闭。我知道这很愚蠢。请注意,一般来说,您不应该使用
==
来比较
字符串
=。结果可能不是你所期望的。相反,
String#equals
符合人们的普遍意愿。搜索它,有很多问题和答案可以解释这个问题。谢谢你的帮助!是的,这是一个严重的错误。为什么这个标签是“TCP”?这个问题的好解决方案。这个问题的好解决方案。(1)格式化你的代码。(2) 为什么他要找这个?(1)格式化你的代码。(2) 为什么这就是他要找的东西?