问题描述
我正在处理JAVA分配,应该处理多行输入.指示信息为从标准输入中读取输入".
I'm working on an JAVA assignment should process multiple lines of input. The instructions read "Input is read from stdin."
给出了示例输入示例:
one 1
two 2
three 3
我不明白上面的示例输入从stdin读取"是什么意思.
I don't understand what the above sample input "read from stdin" means.
这是我编写的一个测试程序,可以消除我的困惑:
Here's a test program I wrote that isolates my confusion:
import java.io.*;
import java.util.Scanner;
class Test
{
public static void main(String[] args)
{
Scanner stdin = new Scanner(System.in);
while(stdin.hasNextLine())
{
String line = stdin.nextLine();
String[] tokens = line.split(" ");
System.out.println(Integer.parseInt(tokens[1]));
}
}
当我在控制台中运行该程序时,它会等待我的输入,并且每当我输入一行时,它就会像预期的那样回显它.因此,我认为也许可以通过以这种方式输入3条线中的每条线来实现上面的示例输入.但是,似乎没有办法结束该过程.输入3行后,如何终止输入?我尝试只按两次Enter键,但这似乎读为仅包含换行符的行,这会导致错误,因为该行不符合预期的2个标记格式.
When I run this program in the console, it waits for my input and each time I input a line it echos it back as I would expect. So I thought perhaps the sample input above would be achieved by entering each of the 3 lines in this fashion. However, there seems to be no way to end the process. After I enter the 3 lines, how do I terminate the input? I tried just pressing enter twice, but that seems to read as a line consisting of only the newline character, which causes an error because the line doesn't fit the 2 token format it expects.
这是控制台交互的样子:
Here's what the console interaction looks like:
javac Test.java
java Test
one 1
1
two 2
2
three 3
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Test.main(Test.java:13)
如果能帮助我指出我的理解方面的空白,我将不胜感激.
I'd appreciate any help in pointing out the gap in my understanding.
推荐答案
您可以尝试要求输入空值
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
String line;
Scanner stdin = new Scanner(System.in);
while(stdin.hasNextLine() && !( line = stdin.nextLine() ).equals( "" ))
{
String[] tokens = line.split(" ");
System.out.println(Integer.parseInt(tokens[1]));
}
stdin.close();
}
}
- 您的代码即将完成.您要做的就是退出while循环.在此代码示例中,我向其添加了一个条件,该条件首先将读取的输入值设置为line,然后检查返回的String是否为空.如果是,则while循环的第二个条件返回false并使其停止.
- 仅在不输入两个值(由空格分隔)的最小值时,才会获得数组索引超出范围的异常.如果您不尝试获取第二个值,则> token [1]<通过静态索引可以避免此错误.
- 使用阅读器时,请记住在使用阅读器后将其关闭.
- 最后但并非最不重要的-您是否尝试过使用通常的Ctrl + C热键终止控制台中的进程?
- Your code is almost completed. All that you have to do is to exit the while loop. In this code sample I added a condition to it that first sets the read input value to line and secondly checks the returned String if it is empty; if so the second condition of the while loop returns false and let it stop.
- The array index out of bounds exception you will only get when you're not entering a minimum of two values, delimitted by whitespace. If you wouldn't try to get the second value >token[1]< by a static index you could avoid this error.
- When you're using readers, keep in mind to close after using them.
- Last but not least - have you tried the usual Ctrl+C hotkey to terminate processes in consoles?
祝你好运!
这篇关于如何停止使用Scanner从stdin读取多行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!