为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2020-02-01 17:23:28
在我的程序中使用多个Scanner对象的正确方法是什么?例如,我使用扫描仪读取文件,然后根据在文件中找到的内容,再次使用扫描仪提示用户输入。显示了我的代码的一部分....Scanner f = new Scanner (System.in); //get the file nameString 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。至于input对象,它是从File而不是从File读取的System.in。
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

我究竟做错了什么?


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


如果输入是关闭的,那么close每个人都将关闭输入(但Strings没有方法)-这对任何人来说都不是很有趣。


编辑:关于多个扫描器损坏的原因的“详细信息”:不要在InputStream上创建多个缓冲包装器


...任何缓冲包装器都是不安全的;如果改为使用扫描仪,则这种情况也可被利用...


另请参见Java代码问题...扫描仪相关?其中还讨论了一些方法。


查看完整回答
反对 回复 2020-02-01
  • 1 回答
  • 0 关注
  • 502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信