1. 程式人生 > >JAVA Scanner 用法注意事項(scanner 使用錯誤:Exception in thread "main" java.util.NoSuchElementExceptionation )

JAVA Scanner 用法注意事項(scanner 使用錯誤:Exception in thread "main" java.util.NoSuchElementExceptionation )

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方法就可消除此錯誤資訊。

以上均個人拙見,如有任何不當之處歡迎指正