这两种从用户那里获取输入的方式有什么区别?

时间:2019-03-18 17:59:09

标签: java user-input

这两种从用户那里获取输入的方式有什么区别?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(br.readLine());

Scanner sc = new Scanner(System.in);
int num=sc.nextInt();

这里假设软件包io和util相应地导入了。

2 个答案:

答案 0 :(得分:1)

这些只是两只完全不同的动物。从流中读取时,您正在读取简单的数量...字符,字节,行。然后,如您所示,您必须添加其他代码以更高级别的方式解释这些数量。

根据Scanner文档:

  

一个简单的文本扫描器,可以解析原始类型和字符串   使用正则表达式。

因此,扫描程序在流的顶部添加了另一级功能。填充输入。它将输入的数据分开,并尝试以各种方式解释它,而不仅仅是字节或行。如果使用简单的流,扫描仪会为您提供很多功能,您必须编写自己的代码。

要更明确地回答您的特定问题...两个建议的代码块都可以为您提供所需的结果吗?如果是这样,并且如果您不打算继续从流中读取任何其他内容,那么使用Scanner可能会过头。如果您要继续操作并继续从流中读取整数,则最好使用原始流。但是,如果您接下来要读取一行文本,一个浮点值或其他内容,则Scanner可能就是您想要的。扫描仪具有处理换行符的技巧。您必须自己使用基本流来做到这一点。

答案 1 :(得分:0)

BufferedReader是

  1. 较旧
  2. 大(8 KB)
  3. 已同步(使其变慢)
  4. 仅读取字符串。

扫描仪是

  1. 小缓冲区(1 KB)
  2. 未同步
  3. 可以解析用户输入,并读取String以外的int,short,byte,float,long和double的数据。

请注意,使用正则表达式时Scanner速度很慢,这会使BufferedReader读取String的速度更快。