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.in
的InputStream
,并使用正则表达式解析InputStream
,从而更容易访问包含在System.in
中的数据
Scanner(System.in) 构造一个新的 Scanner,它产生从指定输入流扫描的值。使用底层平台的默认字符集将流中的字节转换为字符。
我建议使用Scanner
,它通过提供以下方法使代码更简洁、更易于维护:
next()
- 返回下一个String
nextInt()
- 返回下一个int
nextDouble()
- 返回下一个double
next(Pattern pattern)
- 返回匹配pattern
的下一个字符串
【讨论】:
我不知道 InputStream 与 Scanner 和 System.in 的关系如何,谢谢!【参考方案2】:两者都是从控制台获取输入的有效方法。
使用Scanner 可以让事情变得更简单一些,因为它提供了更多可用于检索输入的方法,例如nextFloat
和nextInt
,以及hasNextDouble
等可用于验证的方法输入。
InputStream (System.in
) 的功能更加有限,只提供了几个read
方法,这意味着它可能需要额外的手动工作。
要从控制台读取标准输入(例如双精度数、整数等),我会使用new Scanner(System.in)
方法。使用对您最有意义的一种。
【讨论】:
【参考方案3】:除了前面我想说的答案,你可以使用以下方法——
nextInt()
- 供阅读integer
nextDouble()
- 供阅读double
nextByte()
- 用于阅读byte
nextLong()
- 用于阅读 long
等等...
这里您添加的next()
方法用于读取任何token
作为一个整体。
更多细节可以从Scanner
的javadoc找到。
【讨论】:
【参考方案4】:Scanner
和System.in.read()
是从 Java 代码中读取输入的不同方法,但结果是相同的,这取决于程序员选择应该使用什么。
【讨论】:
以上是关于Java 输入:Scanner 或 IOException的主要内容,如果未能解决你的问题,请参考以下文章