在编程时,我们经常需要和用户互动——比如让用户输入姓名、年龄,或者计算用户提供的数字。Java 提供了 Scanner 类来轻松实现从控制台读取用户输入。本文将用最简单的方式,一步步教你如何使用 Scanner 类获取用户数据。
一、什么是 Scanner?¶
Scanner 是 Java 标准库中的一个工具类,位于 java.util 包下。它能帮我们从控制台(键盘)或文件中读取数据,比如整数、字符串、小数等。对于初学者来说,最常用的是从控制台读取用户输入。
二、如何使用 Scanner?¶
使用 Scanner 只需三步:导入包 → 创建对象 → 调用方法读取数据。
1. 导入 Scanner 类¶
首先,需要告诉 Java 你要使用 Scanner,这需要在代码开头导入 Scanner 类。
import java.util.Scanner; // 导入Scanner类,必须放在代码最上方
2. 创建 Scanner 对象¶
Scanner 对象负责“监听”控制台输入,需要通过 System.in(标准输入流,即键盘)创建:
Scanner scanner = new Scanner(System.in); // 创建Scanner对象
3. 调用方法读取数据¶
创建对象后,通过 scanner 的不同方法读取不同类型的数据,比如:
- nextInt():读取整数(int 类型)
- nextDouble():读取小数(double 类型)
- nextLine():读取整行字符串(包括空格)
- next():读取单个单词(遇到空格或回车停止)
三、读取不同类型的数据¶
下面通过具体例子,看看如何读取常见的数据类型:
1. 读取整数(int)¶
假设要让用户输入年龄,代码如下:
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
// 提示用户输入
System.out.print("请输入你的年龄:");
// 读取整数
int age = scanner.nextInt();
// 输出结果
System.out.println("你输入的年龄是:" + age);
// 关闭Scanner(可选,但建议养成习惯)
scanner.close();
}
}
运行效果:
请输入你的年龄:20
你输入的年龄是:20
2. 读取字符串(String)¶
读取字符串时,next() 和 nextLine() 区别较大,需要注意:
- next():遇到空格或回车停止,只能读取单个单词(比如“小明”“张三”)。
- nextLine():读取整行内容(包括空格),直到用户按回车(适合姓名、地址等需要空格的场景)。
示例 1:用 next() 读取字符串
System.out.print("请输入你的姓名:");
String name = scanner.next(); // 只能读取“小明”,如果输入“小明 小红”,只会读取“小明”
示例 2:用 nextLine() 读取字符串
System.out.print("请输入你的姓名:");
String name = scanner.nextLine(); // 可以读取“小明 小红”等整行内容
3. 读取小数(double)¶
如果需要读取身高、体重等小数,用 nextDouble():
System.out.print("请输入你的身高(米):");
double height = scanner.nextDouble();
System.out.println("你的身高是:" + height + "米");
四、完整示例:读取多类型数据¶
假设要写一个程序,让用户输入姓名、年龄、身高,然后输出这些信息:
import java.util.Scanner;
public class UserInfo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取姓名(用nextLine避免空格问题)
System.out.print("请输入你的姓名:");
String name = scanner.nextLine();
// 读取年龄(整数)
System.out.print("请输入你的年龄:");
int age = scanner.nextInt();
// 读取身高(小数)
System.out.print("请输入你的身高(米):");
double height = scanner.nextDouble();
// 输出信息
System.out.println("\n你的信息:");
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("身高:" + height + "米");
// 关闭Scanner
scanner.close();
}
}
运行效果:
请输入你的姓名:张三
请输入你的年龄:20
请输入你的身高(米):1.75
你的信息:
姓名:张三
年龄:20
身高:1.75米
五、常见问题及解决方法¶
1. 输入不匹配异常¶
如果用户输入的数据类型和程序预期不符(比如让输入整数,用户却输入了字母),会抛出 InputMismatchException。
解决:确保用户输入的数据类型正确,或用 try-catch 处理异常(进阶内容,初学者可暂时忽略,先确保输入正确)。
2. 缓冲区残留问题¶
如果先用 nextInt() 读取整数,再用 nextLine() 读取字符串,可能会出现“读取到空字符串”的问题。
原因:nextInt() 读取整数后,会留下一个“回车符”在缓冲区,nextLine() 会直接读取这个回车符,导致字符串为空。
解决:在 nextInt() 后加 scanner.nextLine() 清空缓冲区:
System.out.print("请输入年龄:");
int age = scanner.nextInt();
scanner.nextLine(); // 吃掉回车符
System.out.print("请输入姓名:");
String name = scanner.nextLine(); // 此时读取的是用户输入的姓名
六、总结¶
Scanner 是 Java 中最基础的输入工具,核心步骤是:
1. 导入 java.util.Scanner;
2. 创建 Scanner 对象 scanner = new Scanner(System.in);
3. 根据数据类型调用 nextInt()/nextLine()/nextDouble() 等方法读取数据;
4. 用完后关闭 scanner.close()(释放资源)。
通过简单示例练习,你很快就能熟练掌握从控制台读取用户输入的方法!