Java Scanner 类详解

简介: `Scanner` 类是 Java 中 `java.util` 包提供的强大工具,用于从多种输入源(如键盘、文件、字符串)读取数据。本文详细介绍如何创建 `Scanner` 对象并使用其常用方法(如 `next()`, `nextInt()`, `nextLine()` 等)。通过示例代码展示如何从标准输入、字符串及文件中读取数据,并进行输入验证。使用时需注意关闭 `Scanner` 以释放资源,并确保输入类型匹配,避免异常。掌握 `Scanner` 可显著提升程序的数据处理能力。

Scanner 类是 Java 中用于获取用户输入的一个非常有用的工具,它位于 java.util 包中。它可以从各种输入源读取数据,包括键盘输入、文件、字符串等。下面是对 Scanner 类的详细介绍。

创建 Scanner 对象

要使用 Scanner 类,首先需要创建一个 Scanner 对象。以下是几种常用的创建方式:

  1. 从标准输入(键盘)读取

    import java.util.Scanner;
    
    public class Main {
         
        public static void main(String[] args) {
         
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入一个整数:");
            int number = scanner.nextInt();
            System.out.println("你输入的整数是:" + number);
            scanner.close(); // 关闭 Scanner 以释放资源
        }
    }
    
  2. 从字符串读取

    String input = "Hello World";
    Scanner scanner = new Scanner(input);
    while (scanner.hasNext()) {
         
        System.out.println(scanner.next());
    }
    scanner.close();
    
  3. 从文件读取

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    public class FileReadExample {
         
        public static void main(String[] args) {
         
            try {
         
                File file = new File("example.txt");
                Scanner scanner = new Scanner(file);
                while (scanner.hasNextLine()) {
         
                    String line = scanner.nextLine();
                    System.out.println(line);
                }
                scanner.close();
            } catch (FileNotFoundException e) {
         
                System.out.println("文件未找到");
            }
        }
    }
    

常用方法

  • hasNext():如果输入中还有一个完整的可用输入,则返回 true
  • next():获取下一个完整的单词(以空格为分隔)。
  • nextLine():获取下一行的输入。
  • nextInt():获取下一个整数。
  • nextDouble():获取下一个双精度浮点数。
  • nextBoolean():获取下一个布尔值。
  • nextFloat():获取下一个单精度浮点数。
  • nextLong():获取下一个长整型数。

输入验证

Scanner 类还可以用于输入验证。例如,你可以不断提示用户输入,直到获得有效输入。

import java.util.Scanner;

public class InputValidation {
   
    public static void main(String[] args) {
   
        Scanner scanner = new Scanner(System.in);
        int number = 0;
        boolean validInput = false;

        while (!validInput) {
   
            System.out.print("请输入一个整数:");
            if (scanner.hasNextInt()) {
   
                number = scanner.nextInt();
                validInput = true;
            } else {
   
                System.out.println("输入无效,请重新输入一个整数。");
                scanner.next(); // 清除无效输入
            }
        }
        System.out.println("你输入的整数是:" + number);
        scanner.close();
    }
}

注意事项

  1. 关闭 Scanner:使用完 Scanner 后,建议调用 scanner.close() 方法以释放资源。尤其是在从文件读取数据时。
  2. 输入类型:确保用户输入的数据类型与所请求的类型相匹配,否则会抛出 InputMismatchException 异常。
  3. 字符编码:在处理文件或不同输入源时,请注意字符编码问题,以避免读取错误。

小结

Scanner 类是一个非常实用的工具,可以简化用户输入和数据读取的过程。通过掌握其各种方法以及适用场景,可以有效提高应用程序的数据处理能力。

相关文章
|
17天前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
33 6
|
4天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
30 17
|
1天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
8 2
|
5天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
9天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
9天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
9天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
17 3
|
12天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
19 5
|
13天前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
12 3
|
15天前
|
存储 SQL 安全
Java零基础-StringBuilder类详解
【10月更文挑战第12天】Java零基础教学篇,手把手实践教学!
18 5