前言
- System.in 表示标准输入设备(如:键盘)
- System.out 表示标准输出设备(如:显示器)
- 通常获取控制台输入(键盘输入),C语言中有提供 scanf() 函数,Java中也有相应的方法
Java获取键盘输入方法一:
/**
* 使用 System.in.read()
* 只能获取一个字符,且必须是字符类型
*/
public static void testInput1() {
System.out.println("请输入一个字符:");
char ch = 0;
try {
int input = System.in.read();
ch = (char) input;
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("你输入的字符为:" + ch);
}
Java获取键盘输入方法二:
/**
* 使用 BufferedReader 类和 InputStreamReader 类
* 默认读取的是字符串类型,如果需要int,float等类型可以通过字符串进行转换
*/
public static void testInput2() {
System.out.println("请输入:");
String input = null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
input = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("你输入的值为:" + input);
}
Java获取键盘输入方法三:
/**
* 使用 Scanner 类
* Scanner 是 Java5 开始推出的,不仅可以读取键盘输入值,也可以读取文件内容
* 读取文件内容时,只需要将构造方法中的数据来源切换成该文件即可
*
* 键盘录入的三个步骤:导包、创建对象、接收数据
*/
public static void testInput3() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine(); // 读取字符串
System.out.println("请输入你的年龄:");
int age = sc.nextInt(); // 读取int
System.out.println("请输入你的身高(单位:cm):");
float height = sc.nextFloat(); // 读取float
System.out.println("==========你的信息==========");
System.out.println("姓名:" + name + "\n年龄:" + age + "\n身高:" + height + "cm\n===========================");
}
/**
* 下面的代码是先执行 nextInt(),再执行 nextLine()
* 问题:这段代码在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入身高这里,是什么原因引起的?
* 原因:在执行 nextInt() 函数之后,敲击了enter回车键,回车符会被 nextLine() 函数吸收,
* 实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数)
*/
public static void testInputBug() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = sc.nextInt(); // 读取int
System.out.println("请输入你的姓名:");
String name = sc.nextLine(); // 读取字符串(这里用next()方法,next() 方法不会接收上面的回车符)
System.out.println("请输入你的身高(单位:cm):");
float height = sc.nextFloat(); // 读取float
System.out.println("==========你的信息==========");
System.out.println("姓名:" + name + "\n年龄:" + age + "\n身高:" + height + "cm\n===========================");
}
- 总结:通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,使用 hasNext 与 hasNextLine 判断是否还有输入的数据。
nextInt() 和 next() 两者的功能是一样的,它们的区别是:
- next() 函数不会接收回车符、tab、空格键等。在接收到有效数据前,所有的空格或者tab键等输入被忽略,next()方法自动将其去掉。只有输入有效数字后才能将其后面输入的空白作为分隔符或者结束符。也就是说,next()方法不能读取带有空格的字符串。
- nextLine() 函数可以接收回车符、tab、空格键,其输入以Enter键结束。也就是说nextLine() 方法返回的是输入回车键以前的所有字符。
网友评论