转:Java中Scanner类和BufferReader类之间的区别

转:Java中Scanner类和BufferReader类之间的区别

原文地址:https://blog.csdn.net/u014717036/article/details/52227782

 

java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。

Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。

下面是两个类的不同之处:

当nextLine()被用在nextXXX()之后,用Scanner类有什么问题

尝试去猜测下面代码的输出内容;

 1 // Code using Scanner Class
 2 import java.util.Scanner;
 3 class Differ
 4 {
 5      public static void main(String args[])
 6      {
 7          Scanner scn = new Scanner(System.in);
 8          System.out.println("Enter an integer");
 9          int a = scn.nextInt();
10          System.out.println("Enter a String");
11          String b = scn.nextLine();
12          System.out.printf("You have entered:- "
13                  + a + " " + "and name as " + b);
14      }
15 }

 

 

Input:

50 
Geek

Output:

Enter an integer Enter a String You have entered:- 50 and name as

让我们尝试使用BufferReader类,并且使用相同的输入

 1 // Code using BufferedReader Class
 2 import java.io.*;
 3 class Differ
 4 {
 5     public static void main(String args[])
 6                   throws IOException
 7     {
 8         BufferedReader br = new BufferedReader(new
 9         InputStreamReader(System.in));
10         System.out.println("Enter an integer");
11         int a = Integer.parseInt(br.readLine());
12         System.out.println("Enter a String");
13         String b = br.readLine();
14         System.out.printf("You have entered:- " + a +
15                           " and name as " + b);
16     }
17 }

 

Input:

50
Geek

Output:

Enter an integer Enter a String you have entered:- 50 and name as Geek

在Scanner类中如果我们在这任何7个nextXXX()方法之后调用nextLine()方法,这nextLine()方法不能够从控制台读取任何内容,并且,这游标不会进入控制台,它将跳过这一步。这nextXXX()方法是这些方法,nextInt(),nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()。

在BufferReader类中就没有那种问题。这种问题仅仅出现在Scanner类中,由于nextXXX()方法忽略换行符,但是,nextLine()并不忽略它。如果我们在nextXXX()方法和nextLine()方法之间使用超过一个以上的nextLine()方法,这个问题将不会出现了;因为nextLine()把换行符消耗了。可以参考这个程序的正确写法。这个问题和C/C++中的scanf()方法紧跟gets()方法的问题一样。

其他的不同点:

  • BufferedReader是支持同步的,而Scanner不支持。如果我们处理多线程程序,BufferedReader应当使用。
  • BufferedReader相对于Scanner有足够大的缓冲区内存。
  • Scanner有很少的缓冲区(1KB字符缓冲)相对于BufferedReader(8KB字节缓冲),但是这是绰绰有余的。
  • BufferedReader相对于Scanner来说要快一点,因为Scanner对输入数据进行类解析,而BufferedReader只是简单地读取字符序列。

原文链接:Difference between Scanner and BufferReader Class in Java

翻译:crane-yuan

[ 转载请保留原文出处、译者和译文链接。]

——————— 本文来自 crane-yuan 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u014717036/article/details/52227782?utm_source=copy 

转载于:https://www.cnblogs.com/mumu122GIS/p/9718102.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101398.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【Python秒杀脚本】淘宝或京东等秒杀抢购

    【Python秒杀脚本】淘宝或京东等秒杀抢购提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、环境二、安装1.ChromeDriver安装2.Seleuinm安装3.淘宝秒杀脚本4.京东秒杀脚本总结前言提示:这里可以添加本文要记录的大概内容:我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速提交订单。这里就要用到一个爬虫利器Selenium,Selenium是一个用于Web应用程序测试的工具,Selenium可以直接运行在浏览器中,通.

  • tensorflow图像基本处理

    tensorflow库提供的专门的图片处理库,以下只是部分示例,更多函数请参照源码‘\tensorflow\_api\v1\image\__init__.py’加载图像方式1:使用tf.gfil

    2021年12月30日
  • opkg[通俗易懂]

    opkg[通俗易懂]opkg是个安装器,小巧,功能全。root@hbg:/#opkgfilesopkgPackageopkg(9c97d5ecd795709c8584e972bfdf3aee3a5b846d-7)isinstalledonrootandhasthefollowingfiles:/bin/opkg–命令存放地/etc/opkg.conf…

  • c++ 字符串流 sstream(常用于格式转换)

    c++ 字符串流 sstream(常用于格式转换)点我进入原文c++字符串流sstream(常用于格式转换)  使用stringstream对象简化类型转换C++标准库中的提供了比ANSIC的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了风格的转换,也许你首先会问:为什么要花

  • 点菜宝基站信道设置_点菜宝怎么连接基站

    点菜宝基站信道设置_点菜宝怎么连接基站最近在跟菜鸟天地系统对接,业务中涉及到单点接入,感觉其实现思想很不错,现分享一下,供大家参考:从CP内部系统进入菜鸟天地,也就是从菜鸟的合作伙伴(物流或快递公司内部系统)单点跳转进入菜鸟天地系统红

  • js获取现在时间_js中如何动态显示日期时间

    js获取现在时间_js中如何动态显示日期时间js可以通过Date对象获取当前日期和时间,使用Date()获取系统当前时间,在使用getFullYear()、getMonth()、getDate()、getHours()等方法获取特定格式的时间,在使用innerHTM方法显示。首先我们来了解一下js获取当前时间所需的一些方法:获取当前时间:vard=newDate();//获取系统当前时间获取特定格式的时间:1、获取当前年份getYear()方法:可以获取年份(2位或4位),其返回值是表示当前Date对象的年份字

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号