设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间00 现在时间00 缓存数据 对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

对自己狠一点,逼自己努力,再过几年你将会感谢今天发狠的自己、恨透今天懒惰自卑的自己。晚安!

查看: 1129|回复: 0

Java Scanner 类最佳实践

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:228
  • 打卡月天数:0
  • 打卡总奖励:3615
  • 最近打卡:2025-10-03 23:50:26
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
380
主题
355
精华
0
金钱
4785
积分
791
注册时间
2023-1-7
最后登录
2025-10-3

发表于 2025-8-28 04:22:19 | 显示全部楼层 |阅读模式

在 Java 编程中,

  1. Scanner
复制代码
类是处理用户输入的重要工具,它提供了强大而灵活的文本解析能力。本文将深入解析
  1. Scanner
复制代码
类的核心功能、使用场景及最佳实践,帮助开发者高效处理控制台输入、文件读取等场景。

一、Scanner 类的核心功能

  1. Scanner
复制代码
类位于
  1. java.util
复制代码
包下,主要用于从各种输入源(如标准输入、文件、字符串等)解析基本数据类型和字符串。其核心功能包括:

  • 基本数据类型解析:支持读取
    1. int
    复制代码
    1. double
    复制代码
    1. boolean
    复制代码
    等基本类型
  • 字符串解析:按行或按分隔符读取字符串
  • 自定义分隔符:通过
    1. useDelimiter()
    复制代码
    方法指定分隔符
  • 正则表达式匹配:支持使用正则表达式匹配特定模式

二、基本用法:从标准输入读取数据

1. 读取控制台输入的字符串和数字

  1. import java.util.Scanner;
  2. public class ScannerExample {
  3. public static void main(String[] args) {
  4. // 创建Scanner对象,关联标准输入流
  5. Scanner scanner = new Scanner(System.in);
  6. System.out.print("请输入您的姓名: ");
  7. String name = scanner.nextLine(); // 读取整行文本
  8. System.out.print("请输入您的年龄: ");
  9. int age = scanner.nextInt(); // 读取整数
  10. System.out.print("请输入您的身高(m): ");
  11. double height = scanner.nextDouble(); // 读取浮点数
  12. System.out.printf("姓名: %s, 年龄: %d, 身高: %.2f\n", name, age, height);
  13. // 关闭Scanner(重要!避免资源泄漏)
  14. scanner.close();
  15. }
  16. }
复制代码

2. 关键方法说明

    1. nextLine()
    复制代码
    :读取一整行文本(包括换行符),返回字符串
    1. next()
    复制代码
    :读取下一个标记(以分隔符为界),返回字符串
    1. nextInt()
    复制代码
    、**
    1. nextDouble()
    复制代码
    ** 等:读取对应类型的数据,指针移至下一个标记
    1. hasNext()
    复制代码
    、**
    1. hasNextInt()
    复制代码
    ** 等:判断是否还有下一个标记或特定类型的数据

三、处理不同输入源

1. 从文件读取数据

  1. import java.io.File;
  2. import java.io.FileNotFoundException;
  3. import java.util.Scanner;
  4. public class FileReadingExample {
  5. public static void main(String[] args) {
  6. try {
  7. // 创建File对象指向待读取的文件
  8. File file = new File("data.txt");
  9. // 创建Scanner对象关联文件输入流
  10. Scanner scanner = new Scanner(file);
  11. // 逐行读取文件内容
  12. while (scanner.hasNextLine()) {
  13. String line = scanner.nextLine();
  14. System.out.println(line);
  15. }
  16. scanner.close(); // 关闭Scanner
  17. } catch (FileNotFoundException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. }
复制代码

2. 从字符串读取数据

  1. import java.util.Scanner;
  2. public class StringParsingExample {
  3. public static void main(String[] args) {
  4. String input = "姓名:张三 年龄:25 身高:1.75";
  5. // 创建Scanner对象关联字符串
  6. Scanner scanner = new Scanner(input);
  7. // 设置分隔符为空格或冒号
  8. scanner.useDelimiter("[ :]");
  9. while (scanner.hasNext()) {
  10. String token = scanner.next();
  11. System.out.println(token);
  12. }
  13. scanner.close();
  14. }
  15. }
复制代码

四、高级用法:自定义分隔符与正则匹配

1. 使用正则表达式作为分隔符

  1. import java.util.Scanner;
  2. public class DelimiterExample {
  3. public static void main(String[] args) {
  4. String data = "Hello,World|Java-Programming";
  5. // 使用正则表达式设置多个分隔符
  6. Scanner scanner = new Scanner(data);
  7. scanner.useDelimiter("[,|\\-]"); // 逗号、竖线或连字符
  8. while (scanner.hasNext()) {
  9. System.out.println(scanner.next());
  10. }
  11. scanner.close();
  12. }
  13. }
复制代码

2. 正则表达式匹配特定模式

  1. import java.util.Scanner;
  2. public class RegexMatchingExample {
  3. public static void main(String[] args) {
  4. String input = "ID:1001 Name:Alice Age:25";
  5. Scanner scanner = new Scanner(input);
  6. // 匹配数字模式
  7. while (scanner.hasNext()) {
  8. if (scanner.hasNextInt()) {
  9. System.out.println("数字: " + scanner.nextInt());
  10. } else {
  11. System.out.println("文本: " + scanner.next());
  12. }
  13. }
  14. scanner.close();
  15. }
  16. }
复制代码

五、常见问题与解决方案

1. next () 与 nextLine () 混用导致的问题

  1. Scanner scanner = new Scanner(System.in);
  2. System.out.print("请输入一个数字: ");
  3. int num = scanner.nextInt(); // 读取数字,但不读取换行符
  4. System.out.print("请输入一行文本: ");
  5. String line = scanner.nextLine(); // 读取残留的换行符,导致直接跳过输入
  6. System.out.println("数字: " + num);
  7. System.out.println("文本: " + line);
  8. scanner.close();
复制代码

解决方案:在

  1. nextInt()
复制代码
等方法后手动消耗换行符:

  1. int num = scanner.nextInt();
  2. scanner.nextLine(); // 消耗残留的换行符
  3. String line = scanner.nextLine(); // 正常读取下一行
复制代码

2. 资源泄漏问题

若不关闭

  1. Scanner
复制代码
,会导致底层输入流未释放,造成资源泄漏。建议使用
  1. try-with-resources
复制代码
语句自动关闭:

  1. try (Scanner scanner = new Scanner(System.in)) {
  2. // 使用scanner读取数据
  3. String input = scanner.nextLine();
  4. System.out.println("输入: " + input);
  5. } // 自动关闭scanner
复制代码

六、Scanner 类与其他输入方式的对比

方式适用场景特点
Scanner复杂格式输入解析灵活的分隔符设置、支持正则匹配、自动类型转换
BufferedReader高效读取大量文本基于字符缓冲,性能更高,但仅支持字符串读取
Console安全读取密码等敏感信息直接与系统控制台交互,输入密码时不显示明文
System.in底层字节流操作最基本的输入流,需手动处理编码和转换

七、最佳实践

  • 及时关闭资源:使用
    1. try-with-resources
    复制代码
    确保
    1. Scanner
    复制代码
    自动关闭
  • 注意输入缓冲:混用
    1. next()
    复制代码
    系列方法与
    1. nextLine()
    复制代码
    时,手动处理换行符
  • 合理选择分隔符:通过
    1. useDelimiter()
    复制代码
    优化复杂格式的解析
  • 验证输入类型:使用
    1. hasNextInt()
    复制代码
    等方法验证输入类型,避免异常
  • 避免重复创建对象:在同一输入源的多次读取中复用
    1. Scanner
    复制代码
    实例

通过掌握

  1. Scanner
复制代码
类的核心功能与最佳实践,开发者可以高效处理各种输入场景,提升代码的健壮性与灵活性

到此这篇关于Java Scanner 类详解的文章就介绍到这了,更多相关Java Scanner 类内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表