Java 输入:扫描仪或 IOException
Java input: Scanner or IOException
我在学校参加 Java class,老师说我应该使用 Scanner
class 的实例从控制台读取输入。
示例:
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 等......)?
Scanner
和 System.in.read()
是从 Java 代码读取输入的不同方法,但结果是一样的,这取决于程序员选择应该使用什么。
这两种都是从控制台获取输入的有效方法。
使用 Scanner 可以使事情变得更容易一些,因为它提供了更多可用于检索输入的方法,例如 nextFloat
和 nextInt
以及 hasNextDouble
可用于验证输入。
InputStream (System.in
) 的功能比较有限,只提供了几个 read
方法,这意味着它可能需要额外的手动工作。
要从控制台读取标准输入(例如双精度、整数等),我会使用 new Scanner(System.in)
方法。使用对您来说最有意义的那个。
您是否注意到,在您的示例中,初始化 Scanner
时您传递了它 System.in
?
System.in
returns InputStream
的实例(自 JDK1.0 起)
The "standard" input stream. This stream is already open and ready to supply input data. Typically this stream corresponds to keyboard input or another input source specified by the host environment or user.
Scanner
(自 JDK1.5 起)使用 System.in
中的 InputStream
并使用正则表达式解析 InputStream
,从而更容易访问包含的数据在 System.in
Scanner(System.in) Constructs a new Scanner that produces values scanned from the specified input stream. Bytes from the stream are converted into characters using the underlying platform's default charset.
我建议使用 Scanner
,它通过提供如下方法使代码更清晰且更易于维护:
next()
- returns 下一个 String
nextInt()
- returns 下一个 int
nextDouble()
- returns 下一个 double
next(Pattern pattern)
- returns 下一个字符串匹配 pattern
除了之前的回答我想说的是,你可以使用以下方法-
nextInt()
- 用于阅读 integer
nextDouble()
- 用于阅读 double
nextByte()
- 用于阅读 byte
nextLong()
- 用于阅读 long
等等...
这里您添加的 next()
方法 - 用于读取任何 token
作为一个整体。
可以从 Scanner
的 javadoc 中找到更多详细信息。
我在学校参加 Java class,老师说我应该使用 Scanner
class 的实例从控制台读取输入。
示例:
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 等......)?
Scanner
和 System.in.read()
是从 Java 代码读取输入的不同方法,但结果是一样的,这取决于程序员选择应该使用什么。
这两种都是从控制台获取输入的有效方法。
使用 Scanner 可以使事情变得更容易一些,因为它提供了更多可用于检索输入的方法,例如 nextFloat
和 nextInt
以及 hasNextDouble
可用于验证输入。
InputStream (System.in
) 的功能比较有限,只提供了几个 read
方法,这意味着它可能需要额外的手动工作。
要从控制台读取标准输入(例如双精度、整数等),我会使用 new Scanner(System.in)
方法。使用对您来说最有意义的那个。
您是否注意到,在您的示例中,初始化 Scanner
时您传递了它 System.in
?
System.in
returns InputStream
的实例(自 JDK1.0 起)
The "standard" input stream. This stream is already open and ready to supply input data. Typically this stream corresponds to keyboard input or another input source specified by the host environment or user.
Scanner
(自 JDK1.5 起)使用 System.in
中的 InputStream
并使用正则表达式解析 InputStream
,从而更容易访问包含的数据在 System.in
Scanner(System.in) Constructs a new Scanner that produces values scanned from the specified input stream. Bytes from the stream are converted into characters using the underlying platform's default charset.
我建议使用 Scanner
,它通过提供如下方法使代码更清晰且更易于维护:
next()
- returns 下一个 String
nextInt()
- returns 下一个 int
nextDouble()
- returns 下一个 double
next(Pattern pattern)
- returns 下一个字符串匹配 pattern
除了之前的回答我想说的是,你可以使用以下方法-
nextInt()
- 用于阅读integer
nextDouble()
- 用于阅读double
nextByte()
- 用于阅读byte
nextLong()
- 用于阅读long
等等...
这里您添加的 next()
方法 - 用于读取任何 token
作为一个整体。
可以从 Scanner
的 javadoc 中找到更多详细信息。