Java输入:Scanner或IOException

时间:2015-02-10 14:57:43

标签: java input java.util.scanner ioexception

我正在学校学习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等)?

4 个答案:

答案 0 :(得分:1)

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

使用Scanner可以使事情变得更容易,因为它提供了更多可用于检索输入的方法,例如nextFloatnextInt以及{{1}等方法可以用来验证输入。

InputStreamhasNextDouble)在功能上更受限制,只提供了一些System.in方法,这意味着它可能需要额外的手动工作。

要从控制台读取标准输入(例如双打,整数等),我会使用read方法。使用对你最有意义的那个。

答案 1 :(得分:1)

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

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

  

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

Scanner(自JDK1.5起)使用InputStream中的System.in并使用正则表达式解析InputStream,从而更轻松地访问{ {1}}

  

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

我建议使用System.in,它通过提供以下方法使代码更清晰,更易于维护:

Scanner - 返回下一个next()

String - 返回下一个nextInt()

int - 返回下一个nextDouble()

double - 返回匹配next(Pattern pattern)

的下一个字符串

答案 2 :(得分:0)

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

答案 3 :(得分:0)

除了之前的答案,我想说,您可以使用以下方法 -

  • nextInt() - 阅读integer
  • nextDouble() - 阅读double
  • nextByte() - 阅读byte
  • nextLong() - 阅读long等等......

此处添加的next()方法 - 用于整体阅读任何token

可以从Scanner的{​​{3}}找到更多详细信息。