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

相关文章
|
16天前
|
Java
java的类详解
在 Java 中,类是面向对象编程的核心概念,用于定义具有相似特性和行为的对象模板。以下是类的关键特性:唯一且遵循命名规则的类名;描述对象状态的私有属性;描述对象行为的方法,包括实例方法和静态方法;用于初始化对象的构造方法;通过封装保护内部属性;通过继承扩展其他类的功能;以及通过多态增强代码灵活性。下面是一个简单的 `Person` 类示例,展示了属性、构造方法、getter 和 setter 方法及行为方法的使用。
|
11天前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
21 9
Java——类与对象(继承和多态)
|
11天前
|
SQL Java 编译器
Java——类与对象(封装)
封装是面向对象编程中的概念,指将数据(属性)和相关操作(方法)组合成独立单元(类),使外部无法直接访问对象的内部状态,只能通过提供的方法进行交互,从而保护数据安全。例如,手机将各种组件封装起来,只暴露必要的接口供外部使用。实现封装时,使用`private`关键字修饰成员变量,并提供`get`和`set`方法进行访问和修改。此外,介绍了包的概念、导入包的方式及其注意事项,以及`static`关键字的使用,包括静态变量和方法的初始化与代码块的加载顺序。
19 10
Java——类与对象(封装)
|
11天前
|
Java C语言
Java——类与对象
这段内容介绍了Java中的类和对象、`this`关键字及构造方法的基本概念。类是对现实世界事物的抽象描述,包含属性和方法;对象是类的实例,通过`new`关键字创建。`this`关键字用于区分成员变量和局部变量,构造方法用于初始化对象。此外,还介绍了标准JavaBean的要求和生成方法。
18 9
Java——类与对象
|
10天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
12 1
Java——String类详解
|
1天前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
19 10
|
13天前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
|
7天前
|
Java 开发者
Java Character 类详解
Java中的`Character`类是`java.lang`包的一部分,用于将基本类型`char`封装为对象,并提供了丰富的静态方法来处理字符,如类型判断、大小写转换等。
|
7天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
7天前
|
Java 索引
Java String 类详解
Java 中的 `String` 类用于表示不可变的字符序列,是 Java 标准库 `java.lang` 包的一部分。字符串对象一旦创建,其内容不可更改,修改会生成新对象。