目录

  1. Scanner 类简介
  2. Scanner 的基本用法
  3. 从控制台读取用户输入
  4. 从文件读取数据
  5. 从字符串读取数据
  6. Scanner 常用方法
  7. 使用分隔符
  8. Scanner 读取换行问题
  9. 参考资料
  10. 出站链接

1. Scanner 类简介

Scanner 类是 Java java.util 包中的一个实用工具类,用于读取 用户输入、文件、字符串等数据。它支持多种数据类型(整数、浮点数、字符串等),并提供了简单的方法来解析输入。

导入 Scanner 类

import java.util.Scanner;


2. Scanner 的基本用法

创建 Scanner 对象可以从 标准输入(键盘)、文件、字符串等 读取数据:

Scanner scanner = new Scanner(System.in); // 读取用户输入


3. 从控制台读取用户输入

Scanner 可以从键盘读取 整数、浮点数、字符串 等数据。

3.1 读取整数

import java.util.Scanner;

public class ScannerExample {
    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();
    }
}

3.2 读取字符串

System.out.print("请输入一行文本: ");
String text = scanner.nextLine();
System.out.println("你输入的是: " + text);


4. 从文件读取数据

Scanner 也可以用于 从文件中读取数据

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ReadFileExample {
    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("文件未找到");
        }
    }
}


5. 从字符串读取数据

import java.util.Scanner;

public class StringScannerExample {
    public static void main(String[] args) {
        String data = "Java 100 3.14 true";
        Scanner scanner = new Scanner(data);

        String word = scanner.next();    // 读取 "Java"
        int number = scanner.nextInt();  // 读取 100
        double decimal = scanner.nextDouble(); // 读取 3.14
        boolean bool = scanner.nextBoolean(); // 读取 true

        System.out.println("字符串: " + word);
        System.out.println("整数: " + number);
        System.out.println("小数: " + decimal);
        System.out.println("布尔值: " + bool);

        scanner.close();
    }
}


6. Scanner 常用方法

方法作用
next()读取 一个 单词(遇到空格停止)
nextLine()读取 一整行
nextInt()读取 整数
nextDouble()读取 双精度浮点数
nextBoolean()读取 布尔值(true/false)
hasNextInt()判断 是否有下一个整数
hasNextDouble()判断 是否有下一个浮点数

示例:

Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数: ");
if (scanner.hasNextInt()) {
    int num = scanner.nextInt();
    System.out.println("输入的整数是: " + num);
} else {
    System.out.println("输入的不是整数");
}
scanner.close();


7. 使用分隔符

默认情况下,Scanner 使用 空格、换行符、Tab 作为分隔符,但可以自定义分隔符:

import java.util.Scanner;

public class ScannerDelimiterExample {
    public static void main(String[] args) {
        String data = "Java,Python,C++";
        Scanner scanner = new Scanner(data);
        scanner.useDelimiter(",");

        while (scanner.hasNext()) {
            System.out.println(scanner.next());
        }
        scanner.close();
    }
}

输出

Java
Python
C++


8. Scanner 读取换行问题

在读取 nextInt()nextDouble() 后直接调用 nextLine() 可能会跳过输入,因为 nextInt() 读取完后,Enter 仍留在输入缓冲区,需要额外处理。

import java.util.Scanner;

public class ScannerBugExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入年龄: ");
        int age = scanner.nextInt();  
        scanner.nextLine(); // 解决换行问题

        System.out.print("请输入姓名: ");
        String name = scanner.nextLine();

        System.out.println("姓名: " + name + ", 年龄: " + age);
        scanner.close();
    }
}


9. 参考资料


10. 出站链接