BufferedReader和Scanner的用法和區別(建議多使用BufferedReader)
在Java SE 6中,可以使用Scanner類取得使用者的輸入,Scanner類位於java.util包中,如果你要使用Scanner取得使用者輸入的話,要導包 import java.util.Scanner;。
這個Scanner的具體用法為Scanner in = new Scanner(System.in);。通過new建立一個Scanner物件,Scanner需要傳入一個System.in作為引數,這個我們可以看作是Scanner通過其內部機制將System.in包裝起來而實現資料的讀取工作的。
Scanner物件通過一系列的in.nextXxx();方法來讀取相應的基本型別的資料,通過in.hasNextXxx();方法來判斷是否還有下一個資料。
然而,Scanner讀取資料是按空格符,這其中包括空格鍵,Tab鍵,Enter鍵。只要遇到其中之一,Scanner的方法就會返回下一個輸入。
BufferedReader類位於java.io包中,所以要使用這個類,就要引入java.io這個包:import java.io.BufferedReader. 使用BufferedReader物件的readLine()方法必須處理java.io.IOException異常(Exception).
使用BufferedReader來取得輸入,理解起來要複雜得多.但是使用這個方法是固定的,每次使用前先如法炮製就可以了.
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String text = buffer.readLine();
BufferReader物件通過readLine()方法來讀取資料,readLine()是按Enter回車來讀取一行資料的,只要在Enter鍵之前的的所有字元都會被readLine(),不包括最後按下的Enter返回字元。
一.BufferReader和Scanner的用法
1.BufferedReader的使用方法
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));//建立BufferedReader物件,從鍵盤讀入
BufferedReader br2= new BufferedReader(new FileReader("test.txt"));//建立BufferedReader物件,從文字檔案讀入
String str = br.readLine(); //讀取一行字串
int a = Integer.parseInt(str); //將字元轉化為整型
System.out.println(a);
String[] temp=br1.readLine().split(" ");//讀取一行資料並用空格分隔,存入字串陣列
}
}
BufferedReader類位於java.io包中,所以要使用這個類,就要引入java.io這個包
import java.io.BufferedReader.readLine()方法會返回使用者在按下Enter鍵之前的所有字元輸入,不包括最後按下的Enter返回字元.使用BufferedReader物件的readLine()方法必須處理java.io.IOException異常(Exception)。
BufferReader讀取的資料都以字串的形式儲存,如果需要其他形式的資料,需要進行強制轉換。
2.Scanner的使用方法
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);//建立Scanner類物件,從鍵盤讀入資料
String temp1 = input.nextLine();//讀取下一行資料
String temp2 = input.next();//讀取字元直到判斷輸入結束
input.useDelimiter(" ");//若以空格分隔字串,需要讀取空格才能繼續讀取或者使用一個空的sc.nextLine()跳過空格 PS:此方法可以設定其他分隔符
int temp3 = input.nextInt();//將讀取的字串轉換成int型別的整數
double temp4 = input.nextDouble();//將讀取的字串轉換成float型;
boolean temp5 = input.nextBoolean();//將讀取的字串轉換成boolean型;
}
}
需要注意的是Scanner中的next()和nextline()方法的區別:
1.nextLine()方法返回的是Enter鍵之前的所有字元,它是可以得到帶空格的字串的。
next()會自動消去有效字元前的空格,只返回輸入的字元,不能得到帶空格的字串。
2.next()在輸入有效字元之後,將其後輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。
nextLine()方法的結束符只是Enter鍵。
如果使用Scanner類讀取的資料中含有空格,不一定非要使用BufferedReader類,可以呼叫Scanner類裡的useDelimiter方法,設定它的分隔符。
Java中Scanner.useDelimiter( )方法使用
二.BufferedReader和Scanner的區別
1.輸入區別
用Scanner獲得使用者的輸入非常的方便,但是Scanner取得輸入的依據是空格符,包括空格鍵,Tab鍵和Enter鍵.當按下這其中的任一鍵時,Scanner就會返回下一個輸入. 當你輸入的內容中間包括空格時,顯然,使用Scanner就不能完整的獲得你輸入的字串.這時候我們可以考慮使用BufferedReader類取得輸入
2.效能比較
經過測試,Scanner的平均耗時是BufferedReader的10倍左右
java Scanner與BufferedReader讀取鍵盤輸入效能比較
在網上刷題的時候如果沒有特殊困難,強烈推薦使用BufferedReader讀取資料!
相關文章
- BufferedReader、FileReader、FileInputStream的區別
- Scanner, BufferedReader, InputStreamReader 與ACM模式輸入ACM模式
- java學習(BufferedReader & InputStreamReader 用法)Java
- java原始碼-BufferedReaderJava原始碼
- Redis中KEYS和SCAN命令的區別和建議Redis
- link和@import引入css 區別,不建議使用@importImportCSS
- JS中的!=、== 、!==、=== 的用法和區別JS
- JS中的!=、== 、!==、===的用法和區別。JS
- exists和not exists及in和not in的用法與區別
- # Scanner:區別next和nextLine
- 解析IO操作InputStream、OutputStream、InputStreamReader OutputStreamWriter、BufferedReader BufferedWriter
- js中!和!!的區別與用法JS
- SQLserver-MySQL的區別和用法ServerMySql
- SQL中IN和EXISTS用法的區別SQL
- PHP中MySQL、MySQLi和PDO的用法和區別PHPMySql
- HTTP協議中PUT和POST使用區別HTTP協議
- java中Scanner類nextLine()和next()的區別和使Java
- Java IO6:字元流進階及BufferedWriter、BufferedReaderJava字元
- SFTP和FTS協議的區別FTP協議
- JQuery中html()和val()的用法區別jQueryHTML
- set autotrace的用法和含意及區別
- 讀取每一行檔案資料的方法bufferedreader
- C++中break和continue的用法和區別C++
- java和js中正規表示式的用法和區別JavaJS
- Gossip協議和Grpc協議的區別Go協議RPC
- awk sub和gsub區別及用法
- select into from 和 insert into select 的用法和區別
- StretchBlt函式和BitBlt函式的區別和用法函式
- Linq中 AsQueryable(), AsEnumerable()和ToList()的區別和用法
- Linux中&&和&,|和||用法及區別詳解!Linux
- 【心得】Ctrl+Z、 、 、eof的區別和用法
- setBackground(),setBackgroundResource(),setBackgroundColor(),setBackgroundDrawable()的區別和用法
- javascript的雙引號和單引號的用法和區別JavaScript
- PHP 中 bind 的用法 self 和 static 的區別PHP
- 00022.08 Scanner的next()和nextLine()區別
- Java入門學習- 理解List和HashMap和HashTable的用法和區別JavaHashMap
- HTTP協議類POST 和GET的區別HTTP協議
- 淺談TCP和UDP協議的區別TCPUDP協議