第一部分:Scanner类简介

了解Scanner类的作用和基本功能

学习目标

理解Scanner类在Java输入处理中的作用,掌握其基本使用场景

1

什么是Scanner类?

Scanner是Java中一个实用的类,位于java.util包中,用于解析基本类型和字符串的简单文本扫描器。

它可以将输入分解为标记(tokens),然后使用各种next方法将其转换为不同类型的值。

2

主要功能

  • 从控制台读取用户输入
  • 从文件读取数据
  • 从字符串解析数据
  • 支持多种数据类型的读取(int, double, String等)

用户输入

Scanner解析

Java程序处理

学习小贴士

Scanner类非常适合初学者用于控制台程序的输入处理。它提供了一系列简单易用的方法来获取用户输入,但在处理大量数据时效率较低。

第二部分:Scanner基本使用步骤

学习如何创建Scanner对象并读取用户输入

学习目标

掌握Scanner对象的创建和基本输入读取方法

1

导入Scanner类

在使用Scanner前,需要在Java文件顶部导入:

import java.util.Scanner;

注意:如果忘记导入,编译器会报错 "Scanner cannot be resolved to a type"

2

创建Scanner对象

创建Scanner对象时需要指定输入源:

// 从控制台读取输入(System.in) Scanner scanner = new Scanner(System.in);

也可以从文件读取:

// 从文件读取输入 Scanner fileScanner = new Scanner(new File("data.txt"));
3

读取字符串输入

使用next()方法读取单个单词(以空格分隔)

System.out.print("请输入你的姓名: "); String name = scanner.next(); System.out.println("你好, " + name + "!");

使用nextLine()方法读取整行文本

System.out.print("请输入你的地址: "); String address = scanner.nextLine(); System.out.println("地址是: " + address);
4

关闭Scanner对象

使用完毕后应该关闭Scanner以释放资源:

scanner.close();

重要:关闭Scanner后不能再使用它读取输入,否则会抛出IllegalStateException异常

完整示例代码

下面是一个完整的Scanner使用示例:

import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { // 创建Scanner对象 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("\n--- 用户信息 ---"); System.out.println("姓名: " + name); System.out.println("年龄: " + age); System.out.println("身高: " + height + "米"); // 关闭Scanner scanner.close(); } }
程序输出示例
请输入你的姓名:
张小明
请输入你的年龄:
25
请输入你的身高(米):
1.75

--- 用户信息 ---
姓名: 张小明
年龄: 25
身高: 1.75米

第三部分:读取不同类型的数据

掌握Scanner类读取各种数据类型的方法

学习目标

能够使用Scanner读取各种基本数据类型

读取整数

int nextInt()

读取一个整数

System.out.print("输入整数: "); int num = scanner.nextInt();

读取浮点数

double nextDouble()

读取一个双精度浮点数

System.out.print("输入小数: "); double value = scanner.nextDouble();

读取布尔值

boolean nextBoolean()

读取一个布尔值 (true/false)

System.out.print("是学生吗?(true/false): "); boolean isStudent = scanner.nextBoolean();

读取单个单词

String next()

读取一个单词(空格分隔)

System.out.print("输入一个单词: "); String word = scanner.next();

读取整行文本

String nextLine()

读取一行文本(包括空格)

System.out.print("输入一句话: "); String sentence = scanner.nextLine();

读取单个字符

Scanner没有直接读取字符的方法,但可以这样实现:

System.out.print("输入一个字符: "); char ch = scanner.next().charAt(0);

学习小贴士

当混合使用nextLine()和其它next方法时,可能会遇到输入跳过的问题。这是因为nextInt()等不读取换行符,导致后续的nextLine()读取到空行。解决方法是在读取数值后添加额外的scanner.nextLine()来消耗换行符。

第四部分:常见问题与技巧

解决使用Scanner时的常见问题

问题1:InputMismatchException

当输入类型与期望类型不匹配时发生

  • 用户输入字母但期望整数
  • 输入格式不正确(如1,000而不是1000)
  • 解决方案:使用hasNextInt()等方法检查输入

问题2:NoSuchElementException

当尝试读取不存在的输入时发生

  • 文件已结束但尝试读取更多数据
  • 关闭Scanner后再次使用
  • 解决方案:检查输入源是否有效,避免重复关闭

问题3:nextLine()跳过输入

混合使用nextXXX()和nextLine()时可能发生

  • 在nextInt()后立即调用nextLine()
  • 解决方案:在nextXXX()后添加一个额外的nextLine()

实用技巧

  • 输入验证:使用hasNextInt()等方法验证输入
  • 分隔符设置:使用useDelimiter()方法自定义分隔符
  • 区域设置:使用useLocale()处理不同地区的数字格式
  • 跳过模式:使用skip()跳过特定模式的输入

输入验证示例

使用hasNextInt()确保输入的是整数:

System.out.print("请输入一个整数: "); // 验证输入是否为整数 while (!scanner.hasNextInt()) { System.out.println("错误: 输入的不是整数!"); System.out.print("请重新输入: "); scanner.next(); // 清除无效输入 } int number = scanner.nextInt(); System.out.println("你输入的整数是: " + number);
程序输出示例
请输入一个整数:
abc
错误: 输入的不是整数!
请重新输入:
12.5
错误: 输入的不是整数!
请重新输入:
25
你输入的整数是: 25

第五部分:综合练习

通过实践巩固Scanner使用技能

练习1:用户注册系统

编写一个用户注册程序,要求输入以下信息:

  • 用户名(字符串)
  • 密码(字符串)
  • 年龄(整数)
  • 邮箱(字符串)
  • 是否接受条款(布尔值)

验证输入有效性,最后输出用户信息。

练习2:简易计算器

编写一个控制台计算器程序,要求:

  • 输入两个数字
  • 输入运算符(+、-、*、/)
  • 根据运算符计算结果
  • 处理除以零的情况
  • 支持连续计算

在线练习

尝试在下方输入框中输入数据,模拟Scanner工作流程

输出将显示在这里...

学习小贴士

掌握Scanner类后,你将能够创建交互式的控制台应用程序。在后续学习中,你可以探索更高级的输入输出技术,如使用BufferedReader读取文件,或使用JOptionPane创建图形界面输入对话框。

学习成果检查

  • ✅ 能够正确创建Scanner对象
  • ✅ 掌握读取不同数据类型的方法
  • ✅ 能够处理常见输入异常
  • ✅ 了解输入验证技巧
  • ✅ 能够使用Scanner构建交互式程序