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 以释放资源
        }
    }
    
    AI 代码解读
  2. 从字符串读取

    String input = "Hello World";
    Scanner scanner = new Scanner(input);
    while (scanner.hasNext()) {
         
        System.out.println(scanner.next());
    }
    scanner.close();
    
    AI 代码解读
  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("文件未找到");
            }
        }
    }
    
    AI 代码解读

常用方法

  • 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();
    }
}
AI 代码解读

注意事项

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

小结

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

相关文章
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
JAVA泛型类的使用(一)
Java 泛型类是 JDK 5.0 引入的重要特性,提供编译时类型安全检测,增强代码可读性和可维护性。通过定义泛型类如 `Box<T>`,允许使用类型参数。其核心原理是类型擦除,即编译时将泛型类型替换为边界类型(通常是 Object),确保与旧版本兼容并优化性能。例如,`Box<T>` 编译后变为 `Box<Object>`,从而实现无缝交互和减少内存开销。
|
4月前
|
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
220 58
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
119 8
|
4月前
|
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
124 17
|
4月前
|
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
177 4
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
117 2
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
124 4

热门文章

最新文章