我正在处理一个 JAVA 任务,它应该处理多行输入。说明为“输入是从标准输入读取的。”
示例输入示例:
one 1
two 2
three 3
我不明白上面的示例输入“从标准输入读取”是什么意思。
这是我编写的一个测试程序,可以解决我的困惑:
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 标记格式。
这是控制台交互的样子:
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)
如能指出我理解上的差距,我将不胜感激。
最佳答案
你可以尝试要求空输入
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 热键来终止控制台中的进程?
祝你好运!
关于java - 如何停止使用 Scanner 从 stdin 读取多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14411173/