Java 输入:Scanner 或 IOException

Posted

技术标签:

【中文标题】Java 输入:Scanner 或 IOException【英文标题】:Java input: Scanner or IOException 【发布时间】:2015-02-10 14:57:43 【问题描述】:

我在学校上 Java 课,老师说我应该使用 Scanner 类的实例来读取来自控制台的输入。

例子:

import java.util.Scanner;

Public class ExampleName 
    public static void main(String[] args) 
        Scanner input = new Scanner(System.in);            
        char letter;

        letter = input.next().charAt(0);
    

但是,我在整个夏天都阅读了Java: A Beginner's Guide,整本书都说要使用System.in.read() 来读取输入。

例子:

import java.io.IOException;

Public class ExampleChar 
    public static void main(String[] args) throws IOException 
        char letter;

        letter = (char) System.in.read();
    

哪种形式是正确的?我应该使用哪种形式来获取基本输入(char、int、double 等....)?

【问题讨论】:

两者是不同的方式。据我所知,第一个是最常用的。 我同意@Christian - 这也是我见过的最常见的方式。另一个优点是,您可以拥有一个 Scanner 对象,您现在可以使用该对象执行其他功能。 【参考方案1】:

您是否注意到,在您的示例中,在初始化 Scanner 时您传递了 System.in

System.in 返回InputStream 的实例(JDK1.0 起)

“标准”输入流。该流已经打开并准备好提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源。

Scanner(自 JDK1.5 起)使用来自System.inInputStream,并使用正则表达式解析InputStream,从而更容易访问包含在System.in 中的数据

Scanner(System.in) 构造一个新的 Scanner,它产生从指定输入流扫描的值。使用底层平台的默认字符集将流中的字节转换为字符。

我建议使用Scanner,它通过提供以下方法使代码更简洁、更易于维护:

next() - 返回下一个String

nextInt() - 返回下一个int

nextDouble() - 返回下一个double

next(Pattern pattern) - 返回匹配pattern的下一个字符串

【讨论】:

我不知道 InputStream 与 Scanner 和 System.in 的关系如何,谢​​谢!【参考方案2】:

两者都是从控制台获取输入的有效方法。

使用Scanner 可以让事情变得更简单一些,因为它提供了更多可用于检索输入的方法,例如nextFloatnextInt,以及hasNextDouble 等可用于验证的方法输入。

InputStream (System.in) 的功能更加有限,只提供了几个read 方法,这意味着它可能需要额外的手动工作。

要从控制台读取标准输入(例如双精度数、整数等),我会使用new Scanner(System.in) 方法。使用对您最有意义的一种。

【讨论】:

【参考方案3】:

除了前面我想说的答案,你可以使用以下方法——

nextInt() - 供阅读integer nextDouble() - 供阅读double nextByte() - 用于阅读byte nextLong() - 用于阅读 long 等等...

这里您添加的next() 方法用于读取任何token 作为一个整体。

更多细节可以从Scanner的javadoc找到。

【讨论】:

【参考方案4】:

ScannerSystem.in.read() 是从 Java 代码中读取输入的不同方法,但结果是相同的,这取决于程序员选择应该使用什么。

【讨论】:

以上是关于Java 输入:Scanner 或 IOException的主要内容,如果未能解决你的问题,请参考以下文章

java中scanner类的用法

Java Scanner 添加可选的用户输入提示

Scanner类的简单用法介绍!

java中如何使用scanner来实现数据的输入?

Java实例——从控制台接收输入的身份证号

Java程序设计——控制台的输入和输出