• 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方法,设置它的分隔符。

  • 相关阅读:
    根据数组对象中的某个属性值排序
    vue小知识
    vue项目中config文件中的 index.js 配置
    小问题
    原生无缝轮播
    webpack打包提交代码
    echarts
    面试问题
    MySql
    vue-router 跳转原理
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/7131887.html
Copyright © 2020-2023  润新知