0%

Java从控制台输入方式

背景

今天面试时遇到了一套计算题,计算逻辑实现很简单,被从控制台获取输入信息难住了。

所以面试结束后,查了下资料。 原来很简单……

从控制台获取输入内容的方式有那些

使用阅读缓冲器类

这个是经典的取输入方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// Reading data using readLine
String name = null;
try {
while (!"0".equals(name)) {
name = reader.readLine();
System.out.println(name);
}

} catch (IOException e) {
throw new RuntimeException(e);
}


}

使用Scanner类

这可能是接受输入的最首选方法。Scanner 类的主要目的是使用正则表达式解析原始类型和字符串,但是,它也可用于在命令行中读取用户的输入

从标记化输入中解析基元(nextInt()、nextFloat()、…)的便捷方法。

正则表达式可用于查找标记。

阅读方式不同步

1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
System.out.println("You entered string " + s);
int a = in.nextInt();
System.out.println("You entered integer " + a);
float b = in.nextFloat();
System.out.println("You entered float " + b);
}

使用控制台类

它已成为从命令行读取用户输入的首选方式。此外,它可以用于读取类似密码的输入,而不用回显用户输入的字符;也可以使用格式字符串语法(如 System.out.printf())。

优点:

读取密码而不回显输入的字符。

读取方法是同步的。

可以使用格式字符串语法。

**不适用于非交互环境(例如 IDE)**。

1
2
3
4
public static void main(String[] args) {
String name = System.console().readLine();
System.out.println("You entered string " + name);
}

执行提示:

1
2
3
Exception in thread "main" java.lang.NullPointerException
at com.lin.springlearn.service.PrimeNumber.main(Test.java:37)

使用命令行参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args)
{
// check if length of args array is
// greater than 0
if (args.length > 0) {
System.out.println(
"The command line arguments are:");
// iterating the args array and printing
// the command line arguments
for (String val : args)
System.out.println(val);
}
else
System.out.println("No command line "
+ "arguments found.");
}

Welcome to my other publishing channels