加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在System.in上使用多个Scanner对象?

发布时间:2020-12-15 00:51:33 所属栏目:Java 来源:网络整理
导读:在我的程序中使用多个Scanner对象的正确方法是什么.例如,我使用扫描仪来读取文件,然后根据文件中的内容,我再次使用扫描仪来提示用户输入.显示了我的代码的摘录 ....Scanner f = new Scanner (System.in); //get the file nameString fileName = f.next();Sca
在我的程序中使用多个Scanner对象的正确方法是什么.例如,我使用扫描仪来读取文件,然后根据文件中的内容,我再次使用扫描仪来提示用户输入.显示了我的代码的摘录
....
Scanner f = new Scanner (System.in); //get the file name
String fileName = f.next();
Scanner input = new Scanner( new File( fileName ) );
while ( input.hasNext() )
{
   String currentLine = input.nextLine();
   if ( some pattern found) {
       Scanner getUserInput = new Scanner (System.in);
       String userInput = getUserInput.next();
       .....
   }
}
....

它似乎不起作用.我需要使用userInput.close()吗?我究竟做错了什么. ?

我不明白的是,第一个System.in只是获取文件名.之后,为什么它会干扰第二个System.in.
至于输入对象,它从File而不是System.in读取.

解决方法

What am I doing wrong?

在同一个流上使用多个扫描程序是潜在的问题.扫描仪可以(并且将会)消耗流 – 这可能(将)导致意外的副作用.最好不要这样做.

如果输入已关闭,则输入??(但字符串没有关闭方法)对所有人都是关闭的 – 这对任何人来说都没有多大乐趣.

编辑:关于多个扫描仪坏的原因的“详细信息”:Do not create multiple buffered wrappers on an InputStream

…any buffered wrapper is unsafe; this condition is also exploitable if a Scanner is used instead…

另见Java code question … scanner related?,其中还讨论了一些方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读