Java Scanner输入:如何获取用户输入,从控制台读取数据

在编程时,我们经常需要和用户互动——比如让用户输入姓名、年龄,或者计算用户提供的数字。Java 提供了 Scanner 类来轻松实现从控制台读取用户输入。本文将用最简单的方式,一步步教你如何使用 Scanner 类获取用户数据。

一、什么是 Scanner?

Scanner 是 Java 标准库中的一个工具类,位于 java.util 包下。它能帮我们从控制台(键盘)或文件中读取数据,比如整数、字符串、小数等。对于初学者来说,最常用的是从控制台读取用户输入。

二、如何使用 Scanner?

使用 Scanner 只需三步:导入包创建对象调用方法读取数据

1. 导入 Scanner 类

首先,需要告诉 Java 你要使用 Scanner,这需要在代码开头导入 Scanner 类。

import java.util.Scanner; // 导入Scanner类,必须放在代码最上方

2. 创建 Scanner 对象

Scanner 对象负责“监听”控制台输入,需要通过 System.in(标准输入流,即键盘)创建:

Scanner scanner = new Scanner(System.in); // 创建Scanner对象

3. 调用方法读取数据

创建对象后,通过 scanner 的不同方法读取不同类型的数据,比如:
- nextInt():读取整数(int 类型)
- nextDouble():读取小数(double 类型)
- nextLine():读取整行字符串(包括空格)
- next():读取单个单词(遇到空格或回车停止)

三、读取不同类型的数据

下面通过具体例子,看看如何读取常见的数据类型:

1. 读取整数(int)

假设要让用户输入年龄,代码如下:

import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        // 创建Scanner对象
        Scanner scanner = new Scanner(System.in);

        // 提示用户输入
        System.out.print("请输入你的年龄:");
        // 读取整数
        int age = scanner.nextInt();

        // 输出结果
        System.out.println("你输入的年龄是:" + age);

        // 关闭Scanner(可选,但建议养成习惯)
        scanner.close();
    }
}

运行效果

请输入你的年龄:20
你输入的年龄是:20

2. 读取字符串(String)

读取字符串时,next()nextLine() 区别较大,需要注意:
- next():遇到空格或回车停止,只能读取单个单词(比如“小明”“张三”)。
- nextLine():读取整行内容(包括空格),直到用户按回车(适合姓名、地址等需要空格的场景)。

示例 1:用 next() 读取字符串

System.out.print("请输入你的姓名:");
String name = scanner.next(); // 只能读取“小明”,如果输入“小明 小红”,只会读取“小明”

示例 2:用 nextLine() 读取字符串

System.out.print("请输入你的姓名:");
String name = scanner.nextLine(); // 可以读取“小明 小红”等整行内容

3. 读取小数(double)

如果需要读取身高、体重等小数,用 nextDouble()

System.out.print("请输入你的身高(米):");
double height = scanner.nextDouble();
System.out.println("你的身高是:" + height + "米");

四、完整示例:读取多类型数据

假设要写一个程序,让用户输入姓名、年龄、身高,然后输出这些信息:

import java.util.Scanner;

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

        // 读取姓名(用nextLine避免空格问题)
        System.out.print("请输入你的姓名:");
        String name = scanner.nextLine();

        // 读取年龄(整数)
        System.out.print("请输入你的年龄:");
        int age = scanner.nextInt();

        // 读取身高(小数)
        System.out.print("请输入你的身高(米):");
        double height = scanner.nextDouble();

        // 输出信息
        System.out.println("\n你的信息:");
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("身高:" + height + "米");

        // 关闭Scanner
        scanner.close();
    }
}

运行效果

请输入你的姓名:张三
请输入你的年龄:20
请输入你的身高(米):1.75

你的信息:
姓名:张三
年龄:20
身高:1.75米

五、常见问题及解决方法

1. 输入不匹配异常

如果用户输入的数据类型和程序预期不符(比如让输入整数,用户却输入了字母),会抛出 InputMismatchException
解决:确保用户输入的数据类型正确,或用 try-catch 处理异常(进阶内容,初学者可暂时忽略,先确保输入正确)。

2. 缓冲区残留问题

如果先用 nextInt() 读取整数,再用 nextLine() 读取字符串,可能会出现“读取到空字符串”的问题。
原因nextInt() 读取整数后,会留下一个“回车符”在缓冲区,nextLine() 会直接读取这个回车符,导致字符串为空。
解决:在 nextInt() 后加 scanner.nextLine() 清空缓冲区:

System.out.print("请输入年龄:");
int age = scanner.nextInt();
scanner.nextLine(); // 吃掉回车符

System.out.print("请输入姓名:");
String name = scanner.nextLine(); // 此时读取的是用户输入的姓名

六、总结

Scanner 是 Java 中最基础的输入工具,核心步骤是:
1. 导入 java.util.Scanner
2. 创建 Scanner 对象 scanner = new Scanner(System.in)
3. 根据数据类型调用 nextInt()/nextLine()/nextDouble() 等方法读取数据;
4. 用完后关闭 scanner.close()(释放资源)。

通过简单示例练习,你很快就能熟练掌握从控制台读取用户输入的方法!

小夜