【问题标题】:Java input: Scanner or IOExceptionJava 输入:Scanner 或 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 对象,您现在可以使用该对象执行其他功能。

标签: java input java.util.scanner ioexception


【解决方案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 作为一个整体。

    更多细节可以从Scannerjavadoc找到。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        • 2012-08-18
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多