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

相关文章
|
8月前
|
Java 编译器 API
Java 密封类:精细化控制继承关系
Java 密封类:精细化控制继承关系
442 83
|
6月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
354 101
|
6月前
|
安全 Java 开发者
Java记录类:简化数据载体的新方式
Java记录类:简化数据载体的新方式
341 100
|
9月前
|
IDE Java 数据挖掘
Java 基础类从入门到精通实操指南
这份指南专注于**Java 17+**的新特性和基础类库的现代化用法,涵盖开发环境配置、数据类型增强(如文本块)、字符串与集合处理进阶、异常改进(如密封类)、IO操作及实战案例。通过具体代码示例,如CSV数据分析工具,帮助开发者掌握高效编程技巧。同时提供性能优化建议和常用第三方库推荐,适合从入门到精通的Java学习者。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
425 37
|
7月前
|
安全 IDE Java
Java记录类型(Record):简化数据载体类
Java记录类型(Record):简化数据载体类
574 143
|
5月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
240 4
|
5月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
306 5
|
5月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
378 5
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
293 1
|
5月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
426 1