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

相关文章
|
6天前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
6天前
|
存储 Java 编译器
课时11:综合实战:简单Java类
本次分享的主题是综合实战:简单 Java 类。主要分为两个部分: 1.简单 Java 类的含义 2.简单 Java 类的开发
|
7天前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
27 5
|
6天前
|
Oracle Java 关系型数据库
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
|
1月前
|
安全 Java 编译器
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
|
1月前
|
安全 Java 编译器
JAVA泛型类的使用(一)
Java 泛型类是 JDK 5.0 引入的重要特性,提供编译时类型安全检测,增强代码可读性和可维护性。通过定义泛型类如 `Box<T>`,允许使用类型参数。其核心原理是类型擦除,即编译时将泛型类型替换为边界类型(通常是 Object),确保与旧版本兼容并优化性能。例如,`Box<T>` 编译后变为 `Box<Object>`,从而实现无缝交互和减少内存开销。
|
4月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
223 58
|
3月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
4月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
127 8
|
4月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
126 17

热门文章

最新文章