我正在处理JAVA分配应该处理多行输入。说明中写着“输入从标准输入读取。”
给出了一个示例输入示例:
one 1
two 2
three 3
我不明白上面的示例输入“从stdin读取”是什么意思。
这是我写的一个测试程序,它隔离了我的困惑:
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行后,如何终止输入?我尝试按两次输入,但这似乎只是一行只包含换行符,这会导致错误,因为该行不符合它所期望的2令牌格式。
以下是控制台交互的内容:
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)
我非常感谢你指出我理解中的差距。
答案 0 :(得分:4)
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();
}
}
答案 1 :(得分:2)
您也可以将您的值放在一个文件中,例如input.txt和do:
java Test < input.txt
答案 2 :(得分:1)
从shell中点击Ctrl-D,它将关闭stdin。或者,管道输入
cat your-input-file | java Test
答案 3 :(得分:1)
要停止输入,您可以提示用户输入quit退出,然后测试输入中是否存在该String,找到时退出循环,或者您可以在循环中使用计数器,退出达到最大迭代时的循环。 break
语句会让你退出循环。