Scanner和BufferReader之区别
2015-04-07 15:58
344 查看
在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高一倍,这个差距可想而知,读取的数据越多,效果就越明显。
如果使用Scanner类读取的数据中含有空格,不一定非要使用BufferedReader类,可以调用Scanner类里的useDelimiter方法,设置它的分隔符。
通过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高一倍,这个差距可想而知,读取的数据越多,效果就越明显。
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; public class Main { public static void main(String[] args) throws Exception { Scanner in = new Scanner(System.in); //输入字符串 String str = in.next(); //输入整型 int a = in.nextInt(); System.out.println(str); System.out.println(a); } }另:Scanner类默认使用的分隔符(delimiter)是空格,也就是tab键啊,换行键啊,回车键啊。。
如果使用Scanner类读取的数据中含有空格,不一定非要使用BufferedReader类,可以调用Scanner类里的useDelimiter方法,设置它的分隔符。
相关文章推荐
- Scanner和BufferReader之区别
- Scanner与BufferReader的区别
- Java输入流之BufferReader和Scanner的用法!
- BufferReader与BufferInputStream 区别及用法
- Scanner和BufferReader用法详记
- java中的四大输入:System.in,Scanner,InputStreamReader,BufferesReader的用法与区别【改】
- InputStreamReader与Scanner的区别
- Java输入流之BufferReader和Scanner的用法!
- [置顶] Scanner和 BufferedReader 的区别(待解决)scanner方式是错的
- scanner和BufferedReader的区别
- java Scanner 和BufferReader 结束符
- Scanner 与 BufferReader的选择
- Scanner、BufferReader读取文件,一个完整一个不完整
- Scanner和BufferedReader的区别
- Java学习笔记-Scanner和BufferedReader的区别和用法
- BufferReader与Scanner的用法比较
- Java输入流之BufferReader和Scanner的用法!
- BufferReader和Scanner的使用
- (第3讲)Java如何获得用户在控制台输入的东西(Scanner和BufferedReader的区别)
- Scanner和BufferReader difference