簡體   English   中英

如何在System.in上使用多個Scanner對象?

[英]How to use multiple Scanner objects on System.in?

在我的程序中使用多個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對象,它從File而不是System.in讀取。

我究竟做錯了什么?

在同一個流上使用多個掃描程序是潛在的問題。 掃描儀可以(並且將會)消耗流 - 這可能(將)導致意外的副作用。 最好不要這樣做。

如果輸入已關閉,則輸入​​(但字符串沒有close方法)對所有人都是關閉的 - 這對任何人來說都不是很有趣。

編輯:關於多個掃描程序錯誤原因的“詳細信息”: 不要在InputStream上創建多個緩沖包裝器

...任何緩沖的包裝都是不安全的; 如果使用掃描儀代替,這種情況也可以利用......

另請參閱Java代碼問題...掃描程序相關? 這也談到了一些方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM