详细对比BfferedReader和Scanner

相同点

1.都是读入字符

BufferedReader 直接创建字符流,Scanner将字节流转化成字符

二者都可以从键盘接收数据,API文档解释,public BufferedReader(Reader in)方法创建使用默认大小的输入缓冲区的缓冲字符输入流。public Scanner(InputStream source) 构造一个新的扫描器,它产生从指定的输入流扫描的值,从流字节转换为字符使用基础平台的默认字符集。

2.用法相似、

Scanner的用法:

import java.util.Scanner;
 
public class Main {
	
	private static Scanner scan;
	
    public static void main(String[] args) {
    	System.out.println("请输入一行字符串:");
    	scan = new Scanner(System.in);
    	String str = scan.nextLine();
    	System.out.println("用scanner输入的字符串是:");
    	System.out.println(str);
    }
}

输出结果:
在这里插入图片描述
BufferedReader的用法:

import java.io.*;
public class Main {

    public static void main(String[] args) throws IOException{
    	System.out.println("请输入一行字符串:");
    	BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    	String str = stdin.readLine();
    	System.out.println("用BufferedReader输入的字符串是:");
    	System.out.println(str);
    }

输出结果:
在这里插入图片描述

3.方法相似

BufferedReader.readLine()方法和Scanner.nextLine()方法用法是一样的,都是接收一行内容,以回车换行符结束,但不包括回车换行符。

不同点

1.使用BufferedReader()时要处理IOException异常。
2.BufferedReader.readLine()方法和Scanner.nextLine()方法用法是一样的,都是接收一行内容,以回车换行符结束,但不包括回车换行符。

用 Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入,而BufferedReader只有Enter键才有效 .当你输入的内容中间包括空格时,显然,使用Scanner就不能完整的获得你输入的字符串.这时候我们可以考虑使用BufferedReader类取得输入.其实在Java SE 1.4及以前的版本中,尚没有提供Scanner方法,我们获得输入时也是使用BufferReader的.

3.另外虽然使用Scanner类的对象读取输入数据比较方便但是运行效率相比BufferedReader低,同时Scanner占用内存空间也大,而且数据量越大,差异越明显;BufferedReader是从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取!
4.BufferedReader 是缓冲字符输入流。它继承于Reader。在方法上要比Scanner丰富

BufferedReader常用方法

BufferedReader(Reader in)
BufferedReader(Reader in, int size)

void     close()
void     mark(int markLimit)
boolean  markSupported()
int      read()
int      read(char[] buffer, int offset, int length)
String   readLine()
boolean  ready()
void     reset()
long     skip(long charCount)

Scanner常用方法:

 next():取得一个字符串;
 nextInt():将取得的字符串转换成int类型的整数;
 nextFloat():将取得的字符串转换成float型;
 nextBoolean():将取得的字符串转换成boolean型;

具体使用哪个还是要依据实际情况普通的输入的话建议用Scanner, 空格结束当前的输入比较常用,(如果你先学了C语言).

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用Java Scanner类输入整数的例子,并附有详细说明: ```java import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); int num = scanner.nextInt(); System.out.println("你输入的整数是:" + num); } } ``` 这个例子中,我们利用Scanner类从控制台读取用户输入的整数,并将它输出到屏幕上。下面是代码的详细说明: 1. 首先,我们创建了一个Scanner对象。这个对象用于从标准输入流(即键盘)读取用户输入的数据。 ```java Scanner scanner = new Scanner(System.in); ``` 2. 然后,我们使用nextInt()方法读取用户输入的整数。它会等待用户输入一个整数,并且只会返回整数部分,如果用户输入了其他类型的数据,它会抛出InputMismatchException异常。 ```java int num = scanner.nextInt(); ``` 3. 最后,我们输出用户输入的整数。 ```java System.out.println("你输入的整数是:" + num); ``` 需要注意的是,如果我们在输入整数之前使用了任何其他Scanner方法(例如next()或nextLine()),则可能会出现问题。这是因为Scanner类的方法会读取输入流中的一部分,并且可能会在读取之后留下额外的换行符或空格。如果我们不使用nextLine()方法进行清除,这些额外的字符可能会导致nextInt()方法无法正常工作。因此,在读取整数之前,最好使用nextLine()方法清除输入流中的任何额外字符: ```java Scanner scanner = new Scanner(System.in); System.out.print("请输入一个整数:"); scanner.nextLine(); // 清除输入流中的额外字符 int num = scanner.nextInt(); System.out.println("你输入的整数是:" + num); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值