scanner配合system.in是java最基础的人机交互方式,需先创建实例并导入java.util.scanner,再按需调用nextxxx()方法读取数据,注意缓冲区换行符问题及异常处理。

用 Scanner 配合 System.in 是 Java 里最基础、最常用的人机交互方式,适合新手快速上手——它不依赖图形界面,只要控制台就能读取用户输入的字符串、数字、布尔值等。
一、先创建 Scanner 对象,关联 System.in
System.in 是标准输入流(默认指向键盘),Scanner 能把它“翻译”成易用的方法。必须在使用前创建实例,且通常只创建一次:
- 正确写法: Scanner sc = new Scanner(System.in);
- 别漏掉 import: import java.util.Scanner;
- 别重复创建: 同一个 Scanner 实例可反复调用 nextXxx() 方法,不需要每次输入都 new 一个
二、按需选择 nextXxx() 方法读取不同类型
Scanner 提供了多种“读取并自动转换”的方法,注意它们的行为差异:
- sc.next():读取下一个单词(遇空格/换行就停),不读换行符,适合单个词或不含空格的字符串
- sc.nextLine():读取整行(包括空格),会消耗掉上一个 nextXxx() 留下的换行符,常用于补位
- sc.nextInt() / nextDouble() / nextBoolean():读数字或布尔值,同样不读换行符,后续若要用 nextLine(),得先加一句 sc.nextLine() 清缓存
✅ 常见陷阱示例:
System.out.print("请输入年龄:");
int age = sc.nextInt(); // 输入 25 后按回车,回车符留在缓冲区
System.out.print("请输入姓名:");
String name = sc.nextLine(); // 这里会立刻拿到空字符串!因为读到了残留的换行符
✅ 解决办法:在 nextInt() 后加 sc.nextLine() 消除换行符
三、加提示 + 处理异常,让交互更健壮
真实场景中,用户可能输错格式(比如该输数字却打了字母)。用 hasNextXxx() 先判断再读取,能避免程序崩溃:
- 安全读整数: if (sc.hasNextInt()) { int x = sc.nextInt(); } else { System.out.println("请输入有效数字"); sc.next(); // 丢弃非法输入 }
- 循环等待合法输入: while (!sc.hasNextInt()) { System.out.print("重输数字:"); sc.next(); }
- 记得关闭 Scanner(可选): sc.close(); —— 一般在程序结束前调用,防止资源警告(但 System.in 关闭后无法再读,小练习可省略)
四、一个完整的小例子:登录模拟
综合运用以上要点:
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("用户名:");
String user = sc.nextLine(); // 用户名可能含空格,用 nextLine
System.out.print("密码(数字ID):");
while (!sc.hasNextLong()) {
System.out.print("请输入有效数字ID:");
sc.next();
}
long id = sc.nextLong();
sc.nextLine(); // 清掉 nextLong 留下的换行符
System.out.print("是否记住我?(true/false):");
boolean remember = sc.hasNextBoolean() ? sc.nextBoolean() : false;
System.out.printf("欢迎 %s!ID:%d,记住状态:%b%n", user, id, remember);
sc.close();
}
}
掌握 Scanner 的核心就是理解“输入缓冲区”和各类 nextXxx() 的行为边界。多练几次,输入逻辑就自然了。










