Java中Scanner類的用法
標籤: dec reader next scanner sdk1.5 it Java 5添加了java.util.Scanner類,這是一個用於掃描輸入文本的新的實用程序。它是以前的StringTokenizer和Matcher類之間的某種結合。由於任何數據都必須通過同一模式的捕獲組檢索或通過使用一個索引來檢索文本的各個部分。於是可以結合使用正則表達式和從輸入流中檢索特定類型數據項的方法。這樣,除了能使用正則表達式之外,Scanner類還可以任意地對字符串和基本類型(如int和double)的數據進行分析。藉助於Scanner,可以針對任何要處理的文本內容編寫自定義的語法分析器。
Scanner是SDK1.5新增的一個類,可是使用該類創建一個對象.
Scanner reader=new Scanner(System.in);
然後reader對象調用下列方法(函數),讀取用戶在命令行輸入的各種數據類型:
next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()
上述方法執行時都會造成堵塞,等待用戶在命令行輸入數據回車確認.例如,擁護在鍵盤輸入
12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用戶輸入一個文
本行並且回車,該方法得到一個String類型的數據。
下面是一個實例:
import java.util.*;
public class Example{
public static void main(String args[]){
System.out.println("請輸入若干個數,每輸入一個數用回車確認"); System.out.println("最後輸入一個非數字結束輸入操作");
Scanner reader=new Scanner(System.in);
double sum=0; int m=0;
while(reader.hasNextDouble()){ double x=reader.nextDouble(); m=m+1; sum=sum+x; }
System.out.printf("%d個數的和爲%f\n",m,sum);
System.out.printf("%d個數的平均值是%f\n",m,sum/m); } }
運行結果:
C:\java>java Example請輸入若干個數,每輸入一個數用回車確認最後輸入一個非數字結束輸入操作34.13445d3個數的和爲113.1000003個數的平均值是37.700000
C:\java>另一個例子,讀取並分析文本文件:hrinfo.txt,文本文件的內容如下:老趙,28,feb-01,true小竹,22,dec-03,false阿波,21,dec-03,false凱子,25,dec-03,true 程序: import java.util.Scanner; import java.io.File;
import java.io.FileNotFoundException;
public class readhuman {
private static void readfile(String filename) { try {
Scanner scanner = new Scanner(new File(filename));
scanner.useDelimiter(System.getProperty("line.separator"));
while (scanner.hasNext()) { parseline(scanner.next()); } //行與行之間的獨立分隔符
scanner.close();
}catch (FileNotFoundException e) { System.out.println(e); }
}
private static void parseline(String line) {
Scanner linescanner = new Scanner(line); linescanner.useDelimiter(",");
//可以修改usedelimiter參數以讀取不同分隔符分隔的內容 String name = linescanner.next(); int age = linescanner.nextInt(); String idate = linescanner.next();
boolean iscertified = linescanner.nextBoolean();
System.out.println("姓名:"+name+" ,年齡:"+ age+" ,入司時間:"+ idate+" ,驗證標記:"+iscertified );
}
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("usage: java readhuman file location"); System.exit(0); }
readfile(args[0]); } }
運行結果:C:\java>java readhuman hrinfo.txt姓名:老趙 ,年齡:28 ,入司時間:feb-01 ,驗證標記:true姓名:小竹 ,年齡:22 ,入司時間:dec-03 ,驗證標記:false姓名:阿波 ,年齡:21 ,入司時間:dec-03 ,驗證標記:false姓名:凱子,年齡:25 ,入司時間:dec-03 ,驗證標記:true