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

相关推荐
zopple2 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001114 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本5 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34165 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan5 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer6 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3567 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3567 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer7 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP8 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪