Java中Scanner类封装System.in用于控制台输入,需用new Scanner(System.in)创建实例,避免重复创建;nextLine()读整行,next()读单词,nextInt()等不消费换行符,需配合sc.nextLine()清除;用hasNextXxx()预检可防异常。

Java 中 Scanner 类是最常用的控制台输入工具,它封装了标准输入流(System.in),能方便地读取字符串、数字、布尔值等各类数据。
创建 Scanner 对象并连接到控制台
必须先创建 Scanner 实例,并将 System.in 作为参数传入:
Scanner sc = new Scanner(System.in);
⚠️ 注意:一个程序中通常只需创建一次,重复创建可能引发资源问题;使用完毕可调用 sc.close() 关闭(尤其在循环或方法中多次使用时)。
立即学习“Java免费学习笔记(深入)”;
常用 nextXxx() 方法及注意事项
不同方法读取不同类型,但行为差异明显,容易出错:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
nextLine():读取一整行(含空格),直到遇到回车。适合读字符串、地址、带空格的姓名等。 -
next():只读取下一个“单词”(以空白符分隔),遇到空格、Tab 或回车就停止。不适合读含空格的输入。 -
nextInt()、nextDouble()、nextBoolean()等:读取对应类型数值。但它们不会消费换行符——这会导致后续调用nextLine()直接返回空字符串。
✅ 正确写法示例(避免换行符残留):
int age = sc.nextInt();
sc.nextLine(); // 消费掉换行符
String name = sc.nextLine();
判断是否有有效输入再读取(防阻塞/异常)
用 hasNextXxx() 方法提前检查,避免因输入格式错误导致程序崩溃:
-
sc.hasNextInt()→ 再调用sc.nextInt() -
sc.hasNextDouble()→ 再调用sc.nextDouble() -
sc.hasNextLine()→ 一般总为 true(除非流已关闭),但配合hasNext()可判断是否还有非空 token
这样能提升健壮性,比如用户误输字母却要读整数时,可提示重输而非抛出 InputMismatchException。
实际小例子:读取姓名和年龄
Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine(); // 允许空格
System.out.print("请输入年龄:");
while (!sc.hasNextInt()) {
System.out.print("请输入有效的整数:");
sc.next(); // 跳过非法输入
}
int age = sc.nextInt();
sc.close();
System.out.println("姓名:" + name + ",年龄:" + age);

















