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,你就能轻松地编写交互式命令行程序,让程序"活"起来!

相关推荐
嵌入式×边缘AI:打怪升级日志19 小时前
使用JsonRPC实现前后台
前端·后端
小码哥_常20 小时前
从0到1:Spring Boot 中WebSocket实战揭秘,开启实时通信新时代
后端
lolo大魔王20 小时前
Go语言的异常处理
开发语言·后端·golang
IT_陈寒1 天前
Python多进程共享变量那个坑,我差点没爬出来
前端·人工智能·后端
码事漫谈1 天前
2026软考高级·系统架构设计师备考指南
后端
AI茶水间管理员1 天前
如何让LLM稳定输出 JSON 格式结果?
前端·人工智能·后端
其实是白羊1 天前
我用 Vibe Coding 搓了一个 IDEA 插件,复制URI 再也不用手动拼了
后端·intellij idea
用户8356290780511 天前
Python 操作 Word 文档节与页面设置
后端·python
酒後少女的夢1 天前
设计模式教程
后端·架构
凌览1 天前
别再手搓 Skill 了,用这个工具 5 分钟搞定
前端·后端