提问人:ghostdog74 提问时间:11/20/2010 最后编辑:Ola Strömghostdog74 更新时间:3/2/2023 访问量:18006
如何在 Java 中的 System.in 上使用多个 Scanner 对象?
How to use multiple Scanner objects on System.in in Java?
问:
在我的程序中使用多个 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
答:
14赞
user166390
11/20/2010
#1
我做错了什么?
在同一流上使用多个扫描程序是根本问题。扫描程序可以(并且将)消耗流 - 这可能会(将)导致意想不到的副作用。最好不要这样做。
如果输入是封闭的,那么输入(但字符串没有方法)对每个人都是封闭的——这对任何人来说都没什么乐趣。close
编辑:关于为什么多个扫描程序不好的“详细信息”:
不要在单个字节或字符流上创建多个缓冲包装器
...任何缓冲包装器都是不安全的;如果改用扫描仪,这种情况也是可以利用的......
评论
0赞
jacobq
9/20/2015
断开的链接看起来应该是 --> securecoding.cert.org/confluence/display/java/...
评论