第一部分:Scanner类简介
了解Scanner类的作用和基本功能
学习目标
理解Scanner类在Java输入处理中的作用,掌握其基本使用场景
什么是Scanner类?
Scanner是Java中一个实用的类,位于java.util
包中,用于解析基本类型和字符串的简单文本扫描器。
它可以将输入分解为标记(tokens),然后使用各种next
方法将其转换为不同类型的值。
主要功能
- 从控制台读取用户输入
- 从文件读取数据
- 从字符串解析数据
- 支持多种数据类型的读取(int, double, String等)
用户输入
Scanner解析
Java程序处理
学习小贴士
Scanner类非常适合初学者用于控制台程序的输入处理。它提供了一系列简单易用的方法来获取用户输入,但在处理大量数据时效率较低。
第二部分:Scanner基本使用步骤
学习如何创建Scanner对象并读取用户输入
学习目标
掌握Scanner对象的创建和基本输入读取方法
导入Scanner类
在使用Scanner前,需要在Java文件顶部导入:
注意:如果忘记导入,编译器会报错 "Scanner cannot be resolved to a type"
创建Scanner对象
创建Scanner对象时需要指定输入源:
也可以从文件读取:
读取字符串输入
使用next()
方法读取单个单词(以空格分隔)
使用nextLine()
方法读取整行文本
关闭Scanner对象
使用完毕后应该关闭Scanner以释放资源:
重要:关闭Scanner后不能再使用它读取输入,否则会抛出IllegalStateException异常
完整示例代码
下面是一个完整的Scanner使用示例:
第三部分:读取不同类型的数据
掌握Scanner类读取各种数据类型的方法
学习目标
能够使用Scanner读取各种基本数据类型
读取整数
读取一个整数
读取浮点数
读取一个双精度浮点数
读取布尔值
读取一个布尔值 (true/false)
读取单个单词
读取一个单词(空格分隔)
读取整行文本
读取一行文本(包括空格)
读取单个字符
Scanner没有直接读取字符的方法,但可以这样实现:
学习小贴士
当混合使用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()确保输入的是整数:
第五部分:综合练习
通过实践巩固Scanner使用技能
练习1:用户注册系统
编写一个用户注册程序,要求输入以下信息:
- 用户名(字符串)
- 密码(字符串)
- 年龄(整数)
- 邮箱(字符串)
- 是否接受条款(布尔值)
验证输入有效性,最后输出用户信息。
练习2:简易计算器
编写一个控制台计算器程序,要求:
- 输入两个数字
- 输入运算符(+、-、*、/)
- 根据运算符计算结果
- 处理除以零的情况
- 支持连续计算
在线练习
尝试在下方输入框中输入数据,模拟Scanner工作流程
输出将显示在这里...
学习小贴士
掌握Scanner类后,你将能够创建交互式的控制台应用程序。在后续学习中,你可以探索更高级的输入输出技术,如使用BufferedReader读取文件,或使用JOptionPane创建图形界面输入对话框。
学习成果检查
- ✅ 能够正确创建Scanner对象
- ✅ 掌握读取不同数据类型的方法
- ✅ 能够处理常见输入异常
- ✅ 了解输入验证技巧
- ✅ 能够使用Scanner构建交互式程序