将未知数量的输入作为字符串

时间:2017-12-04 08:08:14

标签: java

输入具有未知数量的每行长度为20的字符串。我正在使用BufferedReader从控制台获取输入。在最后一次输入之后,它只是在等待输入。我该如何终止这个过程?

示例输入

10100101111011111111  
00000000000000000000  
01011101110110101111   

以上3行作为输入。但没有给出它将有3行输入。这是未知的,我的程序正在等待最后一行之后的下一个输入,它应该终止。

问题中没有指定终止符。

3 个答案:

答案 0 :(得分:0)

这应该有效:

String line; 
while ((line = br.readLine()) != null) {
   // do your stuff... 
}

一旦Buffered Reader获取null(输入结束),它将停止读取。

编辑:

在上面的代码中,br是我的BufferedReader的名称,因此在您的情况下,您应该将更改br用于BufferedReader的名称。

基本上上面的代码,无论你想要它做什么(你放在while循环中的代码),而BufferedReader没有找到空值。

编辑2: 您没有指定输入是从控制台获取的。

String line; 
while ((line = br.readLine()).length < 20) {
// do your stuff... 
}

在您输入长度低于20的行之前,代码将继续询问输入,(因为每行的长度为20)。 基本上,一旦完成写入输入,就可以按RETURN。 但是我写的第一个代码应该是适用于您的场景的正确解决方案。

答案 1 :(得分:0)

那么,您首先需要逻辑制定标准以停止执行您的应用程序。

我可以建议一个:wait for X seconds -- if no input received, then terminate。如果适合您,则可以轻松编码,例如使用while (true) - break循环或使用ScheduledExecutorService。只需存储上次收到输入的内容,然后在代码中查看(currentTime - lastTime) < X sec.

答案 2 :(得分:0)

下面的代码会在遇到“停止”时停止读取输入。您可以使用任何字符串代替“停止”

while ((strLine = br.nextLine()) != null) {

<Your code>

    if (strLine.equalsIgnoreCase("stop")) { 
        break;
    }

}
br.close();

如果您不能从用户那里获得三个以上的输入,则可以尝试以下方法。读取3个输入后,此代码将自动停止输入:

Scanner sc = new Scanner(System.in);
String[] arr=new String[3];
for(int i=0;i<=2;i++) {
arr[i]=sc.nextLine();
}

这是另一种方法:

while (!(strLine = sc.nextLine()).isEmpty()) { <Your code> }

但是你需要在输入后按两次输入。

下一个方法是,

while ((strLine = sc.nextLine()).isEmpty()) { <Your code> }

为此,您需要在同一行中输入所有输入,然后按一次输入。

希望这有帮助。