首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EoF System.in处理

EoF System.in处理
EN

Stack Overflow用户
提问于 2022-03-25 17:50:48
回答 2查看 117关注 0票数 0
代码语言:javascript
复制
Scanner scanner=new Scanner(System.in);        

String s1=scanner.nextLine();         
String s2= scanner.nextLine();

我需要在第一个输入时写EoF(ctrl )。我如何处理它,使stdin不关闭,我可以继续接收输入

EN

回答 2

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2022-03-25 18:32:58

您只需按照最初的方式重新打开Scanner:

代码语言:javascript
复制
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和/或添加重试限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71621195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档