gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:34 27 4
gpt4 key购买 nike

在我的程序中使用多个 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 中读取的。

最佳答案

What am I doing wrong?

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

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

编辑: 关于为什么多个扫描仪不好的“详细信息”: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?其中也谈到了一些方法。

关于java - 如何在 System.in 上使用多个 Scanner 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com