Java 基础补充:零基础学Java | Scanner 类详解

Java 基础补充:Scanner 类详解


1. Scanner 是什么?

Scanner 是 Java 提供的一个用于获取用户输入 的工具类,它位于 java.util 包中。通过 Scanner,我们可以轻松地从键盘读取整数、小数、字符串等不同类型的数据,而无需自己处理复杂的输入流。

为什么需要 Scanner?

在命令行程序中,我们经常需要与用户交互:程序向用户提出问题,用户通过键盘输入答案,程序再根据输入做出响应。如果没有 Scanner,我们需要使用较底层的 System.in 和复杂的字节流处理,非常麻烦。Scanner 封装了这些细节,提供了简洁的 API。


2. 如何使用 Scanner?

2.1 导入 Scanner 类

因为 Scannerjava.util 包中,使用前需要导入:

java 复制代码
import java.util.Scanner;

2.2 创建 Scanner 对象

要读取键盘输入,我们需要创建一个 Scanner 对象,并指定输入源为 System.in(标准输入,即键盘)。

java 复制代码
Scanner scanner = new Scanner(System.in);

System.in 是 Java 提供的标准输入流,默认连接键盘。

2.3 读取不同类型的数据

Scanner 提供了多个方法来读取不同类型的数据:

方法 返回值类型 说明
nextInt() int 读取一个整数
nextDouble() double 读取一个浮点数
nextLine() String 读取一行字符串(包括空格)
next() String 读取一个单词(以空白字符分隔)
nextBoolean() boolean 读取一个布尔值(true/false)
nextByte() byte 读取一个字节
nextShort() short 读取一个短整数
nextLong() long 读取一个长整数
nextFloat() float 读取一个单精度浮点数

这些方法都会阻塞等待用户输入,直到用户输入内容并按回车。

2.4 简单示例

java 复制代码
import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入你的姓名:");
        String name = scanner.nextLine();

        System.out.print("请输入你的年龄:");
        int age = scanner.nextInt();

        System.out.print("请输入你的身高(米):");
        double height = scanner.nextDouble();

        System.out.println("你好," + name + ",你今年 " + age + " 岁,身高 " + height + " 米。");

        scanner.close(); // 关闭扫描器,释放资源
    }
}

运行示例:

复制代码
请输入你的姓名:张三
请输入你的年龄:25
请输入你的身高(米):1.75
你好,张三,你今年 25 岁,身高 1.75 米。

3. 注意事项

3.1 读取完数字后读取字符串的问题

当使用 nextInt()nextDouble() 等读取数字后,输入缓冲区中会残留一个换行符(用户按回车产生的 \n)。如果紧接着使用 nextLine(),它会直接读取这个残留的换行符,导致读取到空字符串。

错误示例

java 复制代码
System.out.print("请输入年龄:");
int age = scanner.nextInt();
System.out.print("请输入姓名:");
String name = scanner.nextLine(); // 直接读到空字符串,不会等待用户输入

解决方法 :在数字读取后,先调用一次 nextLine() 消耗掉换行符,或者都使用 nextLine() 读取后再转换。

java 复制代码
System.out.print("请输入年龄:");
int age = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
System.out.print("请输入姓名:");
String name = scanner.nextLine();

或者都用 nextLine() 然后手动转换:

java 复制代码
System.out.print("请输入年龄:");
int age = Integer.parseInt(scanner.nextLine());

3.2 输入类型不匹配的异常

如果用户输入的内容与期望的类型不符(例如要求输入整数却输入了字母),Scanner 会抛出 InputMismatchException。因此在实际开发中,通常需要加入异常处理或验证。

3.3 关闭 Scanner

Scanner 不再使用时,建议调用 close() 方法释放与之关联的资源。注意:关闭 Scanner 的同时也会关闭其输入流(System.in),关闭后就不能再使用 System.in 读取输入了。所以一般在程序最后关闭。


4. Scanner 的其他用法

除了读取键盘输入,Scanner 还可以读取文件、字符串等。例如:

  • 读取字符串Scanner sc = new Scanner("Hello World");
  • 读取文件Scanner sc = new Scanner(new File("data.txt"));

这为我们处理不同来源的数据提供了统一的方式。


5. 总结

  • Scanner 是 Java 提供的一个方便读取输入的类,位于 java.util 包。
  • 通过 new Scanner(System.in) 创建对象来读取键盘输入。
  • 提供了 nextInt()nextLine() 等方法读取不同类型的数据。
  • 注意数字读取后残留换行符的问题,以及输入类型不匹配的异常。
  • 使用完毕后建议关闭 Scanner

掌握 Scanner,你就能轻松地编写交互式命令行程序,让程序"活"起来!

相关推荐
苏三说技术1 小时前
Claude Code从失控到起飞,只用了这些技巧
后端
长栎2 小时前
写 for 循环写了十年,你却从没用过迭代器模式最狠的那一面
后端
LiaCode2 小时前
Redis 在生产项目的使用
前端·后端
用户559822481222 小时前
Docker Compose Down 导致容器数据误删——ext4 日志恢复全记录
后端
LiaCode2 小时前
一天学完 redis 的爽翻版核心知识总结
前端·后端
大刚测试开发实战2 小时前
如何内网穿透访问本地私有化部署的TestHub
前端·后端·github
xiaodaoluanzha3 小时前
迄今為止,最簡單的編程語言 Nolang
前端·后端
Csvn3 小时前
Docker 容器管理入门 — 从镜像到容器编排
后端
用户762352425913 小时前
ShardingJDBC
后端
行者全栈架构师3 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端