【问题标题】:How to use multiple Scanner objects on System.in?如何在 System.in 上使用多个 Scanner 对象?
【发布时间】:2011-05-13 01:36:47
【问题描述】:

在我的程序中使用多个 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。 至于input 对象,它是从文件中读取的,而不是从System.in 中读取的。

【问题讨论】:

    标签: java inputstream java.util.scanner


    【解决方案1】:

    我做错了什么?

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

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

    编辑:“详细说明”为什么多台扫描仪不好:Do not create multiple buffered wrappers on an InputStream

    ...任何缓冲包装器都是不安全的;如果使用 Scanner 代替,这种情况也可以利用...

    另见Java code question ... scanner related?,其中也谈到了一些方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多