我正在学校学习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等)?
答案 0 :(得分:1)
两者都是从控制台获取输入的有效方法。
使用Scanner可以使事情变得更容易,因为它提供了更多可用于检索输入的方法,例如nextFloat
和nextInt
以及{{1}等方法可以用来验证输入。
InputStream(hasNextDouble
)在功能上更受限制,只提供了一些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)
Scanner
和System.in.read()
是从Java代码读取输入的不同方法,但结果是相同的,这取决于程序员选择应该使用的内容。
答案 3 :(得分:0)
除了之前的答案,我想说,您可以使用以下方法 -
nextInt()
- 阅读integer
nextDouble()
- 阅读double
nextByte()
- 阅读byte
nextLong()
- 阅读long
等等...... 此处添加的next()
方法 - 用于整体阅读任何token
。
可以从Scanner
的{{3}}找到更多详细信息。