Scanner scanner=new Scanner(System.in);
String s1=scanner.nextLine();
String s2= scanner.nextLine();我需要在第一个输入时写EoF(ctrl )。我如何处理它,使stdin不关闭,我可以继续接收输入
发布于 2022-03-25 18:00:11
不能。一旦到达EOF,输入流将处于无效状态以供进一步读取。
如果需要发出类似EOF的信号,但随后允许读取,则必须使用程序识别的一些特殊输入数据。
有一些丑陋的黑客可以防止Ctrl+D被识别为EOF:How do I reopen System.in after EOF or prevent EOF entirely?。也见https://stackoverflow.com/a/1066647/18157。
发布于 2022-03-25 18:32:58
您只需按照最初的方式重新打开Scanner:
import java.util.*;
class Foo {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.err.println("Enter some text and hit some Ctr+D");
while (true) {
try {
String s = scanner.nextLine();
System.out.println("You wrote: " + s);
} catch(NoSuchElementException e) {
System.err.println("EOF. Retrying.");
scanner = new Scanner(System.in); // HERE
}
}
}
}请注意,如果流永远标记EOF,则这是一个无限循环,例如当管道或重定向文件时,因此您有责任验证stdin是tty和/或添加重试限制。
https://stackoverflow.com/questions/71621195
复制相似问题