Fight With Me!!!

导航

Scanner和BufferReader之区别

在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位于java.io包中,使用BufferReader就相对来说没有那么多方法来让你选择啦!读取数据比较固定,这样格式也就相对来说比较单一,只要记住就这一读取数据的方法。BufferReader br = new BufferReader(new InputStreamReader(System.in));。这个BufferReader对象通过readLine();方法来读取数据,readLine()是按Enter回车来读取一行数据的,只要在回车键之前的都会被readLine();方法返回。
然而,要使用BufferReader输入一些字符之外的类型的数据,就要相对比较麻烦,需要通过一些XXXX.parseXxx();来转换相应的数据类型,虽然,麻烦一些,但通过在一些OJ系统上的和Scanner作对比,BufferReader的效率要比Scanner高一倍,这个差距可想而知,读取的数据越多,效果就越明显。

 

[java] view plain copy
 
  1. import java.io.BufferedReader;  
  2. import java.io.InputStreamReader;  
  3.   
  4. public class Main {  
  5.   
  6. public static void main(String[] args) throws Exception {  
  7. String str;  
  8. int a;  
  9. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  10. //读取一行字符串  
  11. str = br.readLine();  
  12. //将字符转化为整型  
  13. a = Integer.parseInt(str);  
  14. System.out.println(a);  
  15. }  
  16. }  
  17. //这个是Scanner的例子:  
[java] view plain copy
 
  1. import java.util.Scanner;  
  2.   
  3. public class Main {  
  4.   
  5.   
  6. public static void main(String[] args) throws Exception {  
  7. Scanner in = new Scanner(System.in);  
  8. //输入字符串  
  9. String str = in.next();  
  10. //输入整型  
  11. int a = in.nextInt();  
  12. System.out.println(str);  
  13. System.out.println(a);  
  14. }  
  15. }  

另:Scanner类默认使用的分隔符(delimiter)是空格,也就是tab键啊,换行键啊,回车键啊。。
如果使用Scanner类读取的数据中含有空格,不一定非要使用BufferedReader类,可以调用Scanner类里的useDelimiter方法,设置它的分隔符。

posted on 2017-07-07 14:01  nickTimer  阅读(661)  评论(0编辑  收藏  举报