Java中Scanner類的用法

jopen 11年前發布 | 28K 次閱讀 Java Java開發

JavaScanner類的用法

Java 5添加了java.util.Scanner類,這是一個用于掃描輸入文本的新的實用程序。它是以前的StringTokenizerMatcher類之間的某種結合。由于任何數據都必須通過同一模式的捕獲組檢索或通過使用一個索引來檢索文本的各個部分。于是可以結合使用正則表達式和從輸入流中檢索特定類型數據項的方法。這樣,除了能使用正則表達式之外,Scanner類還可以任意地對字符串和基本類型(intdouble)的數據進行分析。借助于Scanner,可以針對任何要處理的文本內容編寫自定義的語法分析器。

ScannerSDK1.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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!