JAVA Scanner 用法注意事項(scanner 使用錯誤:Exception in thread "main" java.util.NoSuchElementExceptionation )
阿新 • • 發佈:2019-02-15
JAVA Scanner 的一些用法注意事項
最近寫java程式碼時,在使用scanner類的時候遇到了一些問題,於是決定查詢一些資料瞭解scanner類以及一些具體使用事項。以便後續開發時作為參考。
目錄
scanner 的幾種常見用法
scanner 方法提供了一種方便從控制檯讀取資料的方法。使用格式為 Scanner in = new Scanner(System.in); 之後可以對於in做一系列操作。如:
- 讀取下一字串 next()
- 讀取一整行資料 nextLine()
- 返回一個布林值,用於判斷下一行是否資料 hasNext()
- 以特定格式讀取資料(正則) useDelimiter(“format”)
- 讀取特定資料:nextxx() nextInt(), nextFloat()等
程式測試
測試程式碼
此處實現將scanner類的一些常見函式使用進行展示:
package testScanner;
import java.util.Scanner;
public class testScanner {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String aString;
aString = in.next();//讀取單個字串,遇空格終止讀取。使用nextline則可以讀取整行
System.out.println("read result by using .next: " + aString);
System.out.println("the remant part(staying in the buffer): " + in.next());
//testFunction();
in.useDelimiter("[^a-zA-Z]+");//使用正則表示式規範讀取格式
//System.out.println(in.delimiter());
System.out.println("Only alphabet is allowed:" );
while(in.hasNext()){
System.out.println(in.next());
}
in.close();
}
public static void testFunction(){
Scanner test = new Scanner(System.in);
System.out.println("in the test function");
test.close();
}
}
程式執行結果
使用過程中的一些注意事項
(Exception in thread “main” java.util.NoSuchElementExceptionation java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source錯誤的產生與解決方案)
依然是上面那一段程式如果呼叫testFunction函式的話,進過測試可以發現在讀取正則部分時,無法實現從控制檯輸入。
這是因為在函式中,聲明瞭一個scanner物件,並且呼叫了close方法。這可能是由於所有的scanner類共享一個輸入流,當其中一個呼叫關閉函式的時候,所有的scanner物件都關閉了。
所以建議大家在編寫程式時,在不同地方使用scanner類的時候,注意只需呼叫一次close方法,並且要注意在此後無任何讀控制檯操作。錯誤的用法輕則會導致無法讀入。重則會使程式報錯。大家有時遇到報錯資訊為:
的問題大多是由於這種錯誤操作引起的,此時只需確保只在最後呼叫一次close方法就可消除此錯誤資訊。
以上均個人拙見,如有任何不當之處歡迎指正