【问题标题】:Scanner or InputStreamReader? [duplicate]扫描仪还是 InputStreamReader? [复制]
【发布时间】:2018-10-27 05:11:08
【问题描述】:

InputStreamReader 相比 Scanner 类有什么优势?

扫描仪在我看来各方面都更好。

为什么我必须将throws IOExceptionInputStreamReader 一起使用?

例如:-

1)

BufferedReader in  = new BufferedReader(new InputStreamReader(System.in));

2)

Scanner sc=new Scanner(System.in);

什么是 1) 可以做和 2) 不能做的事情?

【问题讨论】:

标签: java input java.util.scanner java-io inputstreamreader


【解决方案1】:

当使用缓冲阅读器时,我们需要导入 java.io 包,因此我们需要通过 try 和 catch 或使用 throws Exception 来处理异常。当我们在 nextInt 之后使用 nextLine 时,使用 Scanner 类有一个缺点: 它不读取值并且输出与预期输出不同

//示例扫描仪

import java.util.Scanner; 

public class c 

{

    public static void main(String args[]) 

    {

        Scanner scn = new Scanner(System.in); 

        System.out.println("Enter an integer"); 

        int a = scn.nextInt(); 

        System.out.println("Enter a String"); 

        String b = scn.nextLine(); 

        System.out.printf("You have entered:- "+ a + " " + "and name as " + b);

    } 


}

输入:2,rajat

预期输出:You have entered:-2 and name as rajat

实际输出:You have entered:-2 and name as

字符串 b 中不需要 rajat,而 BufferReader 类没有这样的问题

//缓冲阅读器示例

import java.io.*; 

class c

{

    public static void main(String args[]) throws IOException 

    { 

        BufferedReader br = new BufferedReader(new

        InputStreamReader(System.in)); 

        System.out.println("Enter an integer"); 

        int a = Integer.parseInt(br.readLine()); 

        System.out.println("Enter a String"); 

        String b = br.readLine(); 

        System.out.printf("You have entered:- " + a + " and name as " + b); 

    }

}

输入2,rajat

预期输出:You have entered:-2 and name as rajat

实际输出:You have entered:-2 and name as rajat

【讨论】:

  • 为什么Scanner会出现这个错误?
  • 我猜是因为行被破坏或因为整数而已经使用?我添加了一个scn.nextLine(),现在它可以正常工作了。
  • 好的,我已经解决了问题。还有其他区别吗?
  • 你在比较苹果或橘子@AdityaSoni。 InputStreamReader 只是从InputStream 中读取charScanner tokenizese - 例如,如果您正在编写 XML 解析器,则不需要标记化,您只需要数据。我链接的答案详细介绍了所有不同的方法以及它们的用途。作为一般规则,Scanner 的速度要慢得多,因为如果你不需要它,应该避免它这样做。
猜你喜欢
  • 2012-04-21
  • 2016-06-12
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
相关资源
最近更新 更多