Scanner類是JDK1.5以後出現的用于解決輸入流處理問題的程式類,在整體設計上優于之前版本的BufferedReader類,本節将詳細介紹Scanner類的相關内容。
【本節目标】
通過閱讀本節内容,你将了解到Scanner類内提供的相關方法及其功能,學會使用Scanner類輸入字元串、數字、生日等資訊以及使用Scanner類讀取檔案資訊,對程式IO擁有一個較為全面的認識。
Scanner類
java.util.Scanner是從JDK1.5之後追加的一個程式類,其主要的目的解決輸入流的通路問題的,可以了解為BufferedReader的替代功能類,在Scanner類裡面有如下幾種操作方法:
- 構造:public Scanner(InputStream source);
- 判斷是否有資料:public boolean hasNext();
- 取出資料:public String next();
- 設定分隔符:public Scanner useDelimiter(String pattern);
範例:使用Scanner實作鍵盤資料輸入
import java.util.Scanner;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入年齡:");
if (scan.hasNextInt()) { //判斷是否有整數輸入
int age = scan.nextInt() ; //直接擷取數字
System.out.println("您的年齡:" + age);
} else {
System.out.println("咋看不懂呢?輸入的是年齡。");
}
scan.close();
}
}
此時可以明顯的感受到Scanner的處理會更加的簡單。
範例:輸入一個字元串
import java.util.Scanner;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入資訊:");
if (scan.hasNext()) {
String msg = scan.next();
System.out.println("輸入資訊為:" + msg);
}
scan.close();
}
}
使用Scanner輸入資料還有一個最大的的特點是可以直接利用正則進行驗證判斷。
範例:輸入一個人的生日(yyyy-MM-dd)
import java.util.Scanner;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
System.out.println("請輸入您的生日:");
if (scan.hasNext("\\d{4}-\\d{2}-\\d{2}")) {
String str = scan.next("\\d{4}-\\d{2}-\\d{2}");
System.out.println("輸入資訊為:" + new SimpleDateFormat("yyyy-MM-dd").parse(str));//換行不算輸入
}
scan.close();
}
}
現在可以發現Scanner的整體設計要好于BufferedReader,而且要比直接使用InputStream類讀取要友善。例如,現在如果要讀取一個文本檔案中的所有内容資訊,如果采用的是InputStream類,那麼就必須依靠記憶體輸出流,進行臨時資料的儲存,之後還需要判斷讀取的内容是否是換行。
範例:使用Scanner讀取
import java.io.File;
import java.util.Scanner;
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(new File("D:" + File.separator + "mldn-info.txt"));
scan.useDelimiter("\n");//設定讀取分隔符
while (scan.hasNext()) {
System.out.println(scan.next());
}
scan.close();
}
}
在以後的開發過程之中,如果程式需要輸出資料一定使用列印流,輸入資料使用Scanner(BufferedReader)。
想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。
本内容視訊來源于
阿裡雲大學 下一篇:使用Serializable實作類對象序列化能力 | 帶你學《Java語言進階特性》之六十九 更多Java面向對象程式設計文章檢視此處