天天看點

Java輸入流之BufferReader和Scanner的用法!

在Java中,我們都知道Java的标準輸入串是System.in。但是我們卻很少在Java中看到誰使用它,這是因為我們平時輸入的都是一個字元串或者是一個數字等等。而System.in提供的read方法是通過位元組來讀取資料的,是以對我們來說太麻煩啦!

在Java SE6中我們可知道一個非常友善的輸入資料的類Scanner,位于java.util包中,這個Scanner的具體用法為Scanner in = new Scanner(System.in);。通過new建立一個Scanner對象,Scanner需要傳入一個System.in作為參數,這個我們可以看作是Scanner通過其内部機制将System.in包裝起來而實作資料的讀取工作的。Scanner對象通過一系列的in.nextXxx();方法來讀取相應的基本類型的資料,通過in.hasNextXxx();方法來判斷是否還有下一個資料。

然而,Scanner讀取資料是按空格符,這其中包括空格鍵,Tab鍵,Enter鍵。隻要遇到其中之一,Scanner的方法就會傳回下一個輸入 ,這也就是我們會面臨的另一個問題,當我們的輸入資料中有空格時,我們就不會得到我們想要的資料,這樣我們就要考慮到BufferReader來讀取資料啦!

BufferReader位于java.io包中,使用BufferReader就相對來說沒有那麼多方法來讓你選擇啦!讀取資料比較固定,這樣格式也就相對來說比較單一,隻要記住就這一讀取資料的方法。BufferReader br = new BufferReader(new InputStreamReader(System.in));。這個BufferReader對象通過readLine();方法來讀取資料,readLine()是按Enter回車來讀取一行資料的,隻要在Enter鍵之前的都會被readLine();方法傳回,

然而,要使用BufferReader輸入一些字元之外的類型的資料,就要相對比較麻煩,需要通過一些XXXX.parseXxx();來轉換相應的資料類型,雖然,麻煩一些,但通過在一些OJ系統上的和Scanner作對比,BufferReader的效率要比Scanner高一倍,這個差距可想而知,讀取的資料越多,效果就越明顯。

具體使用例子可以看:import java.io.BufferedReader;

import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws Exception {

String str;

int a;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

//讀取一行字元串

str = br.readLine();

//将字元轉化為整型

a = Integer.parseInt(str);

System.out.println(a);

}

這個是Scanner的例子;import java.util.Scanner;

Scanner in = new Scanner(System.in);

//輸入字元串

String str = in.next();

//輸入整型

int a = in.nextInt();

System.out.println(str);

如有不當之處還望大家指教,共同學習!