跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 基础:Scanner 类用法详解

Java Scanner 类位于 java.util 包,用于从标准输入流读取不同类型数据。常用方法包括 nextInt 读取整数、nextFloat/nextDouble 读取浮点数、next 读取单词、nextLine 读取整行。需注意 nextInt 等方法不会消耗换行符,后续调用 nextLine 可能读取空字符串,应先调用 nextLine 清空缓冲区。此外,输入类型不匹配会抛出 InputMismatchException,应进行异常处理并及时关闭 Scanner 对象释放资源。

蓝绿部署发布于 2025/10/25更新于 2026/6/418 浏览
Java 基础:Scanner 类用法详解

一、Scanner 类概述

Scanner 类是 Java 中用于获取用户输入的一个实用类,它位于 java.util 包下。

通过 Scanner 类,可以方便地从多种输入源(比如标准输入流,也就是键盘输入,或者文件等)读取不同类型的数据,例如整数、小数、字符串等,大大简化了输入操作相关的编程工作。

二、Scanner 类的创建

在使用 Scanner 类之前,需要先创建它的对象。如果要从标准输入(键盘)读取数据,创建示例代码如下:

import java.util.Scanner;
public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 后续可使用该 scanner 对象进行输入读取操作
    }
}

这里通过 new Scanner(System.in) 创建了一个 Scanner 对象,System.in 表示标准输入流,意味着后续操作将从键盘获取输入内容。

三、常用方法及读取不同类型数据

  1. 读取整数 使用 nextInt() 方法可以读取用户输入的整数,示例代码如下:
import java.util.Scanner;
public class ReadInt {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();
        // 程序执行到这里就会停下来,等待键盘的输入。
        // 键盘如果没有输入,这里就会一直卡着
        // 直到用户输入了内容之后,敲回车,这行代码就执行结束了
        // 这样就完成了数据从控制台到内存
        System.out.println("你输入的整数是:" + num);
        scanner.close();
    }
}

这里提示用户输入整数后,调用 nextInt() 方法获取输入并赋值给 int 类型的变量 num,最后输出展示读取到的整数内容。需要注意的是,在读取完成后,如果不再需要使用该 Scanner 对象,最好调用 scanner.close() 方法关闭它,以释放相关资源。

**注意:**针对 nextInt() 方法来说,只能接收整数数字。输入其他的字符串会报错。

2. 读取浮点数(小数) 若要读取浮点数,可以使用 nextFloat() 方法(读取单精度浮点数)或者 nextDouble() 方法(读取双精度浮点数),示例代码如下:

import java.util.Scanner;
public class ReadFloat {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个单精度浮点数:");
        float fNum = scanner.nextFloat();
        System.out.println("你输入的单精度浮点数是:" + fNum);
        System.out.println("请输入一个双精度浮点数:");
        double dNum = scanner.nextDouble();
        System.out.println("你输入的双精度浮点数是:" + dNum);
        scanner.close();
    }
}

上述代码分别演示了读取单精度和双精度浮点数的过程,按照提示输入相应类型的小数,就能通过对应方法获取并输出展示。

3. 读取字符串

读取字符串有两种常用方式,一种是 next() 方法,一种是 nextLine() 方法。

(1)next() 方法:它读取输入的下一个单词(以空格、制表符等空白字符作为分隔符)

**细节:**从键盘上接收一个字符串,但是接收的是第一个空格之前的内容

示例代码:

import java.util.Scanner;
public class ReadStringNext {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一些单词(以空格分隔):");
        String word = scanner.next();
        System.out.println("你输入的单词是:" + word);
        scanner.close();
    }
}

输入多个单词时,它只会获取第一个单词并返回。

(2)nextLine() 方法:该方法读取输入的一整行内容,示例代码:

import java.util.Scanner;
public class ReadStringNextLine {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一行文字:");
        String line = scanner.nextLine();
        System.out.println("你输入的文字内容是:" + line);
        scanner.close();
    }
}

它会获取从当前位置到行尾的所有字符,更适合读取完整的语句等情况。

**注意:**从键盘上接收一个字符串,但是接收的是第一个换行符之前的内容

四、可能遇到的问题及注意事项

1. 输入不匹配异常

如果用户输入的数据类型和期望读取的数据类型不一致,例如:期望读取整数,但用户输入了字母等非数字内容,会抛出 InputMismatchException 异常。所以在实际应用中,可能需要添加异常处理代码来让程序更健壮,示例如下:

import java.util.InputMismatchException;
import java.util.Scanner;
public class ExceptionHandle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try {
            System.out.println("请输入一个整数:");
            int num = scanner.nextInt();
            System.out.println("你输入的整数是:" + num);
        } catch (InputMismatchException e) {
            System.out.println("输入的数据类型不正确,请重新输入整数!");
        } finally {
            scanner.close();
        }
    }
}

这里使用 try-catch 语句块捕获可能出现的输入类型不匹配异常,并在 catch 块中给出相应提示,无论是否出现异常,最终都会在 finally 块中关闭 Scanner 对象。

2. nextLine() 方法使用的坑

由于 nextInt() 只读取整数,不读取后续的换行符,这会导致 nextLine() 在下一次调用时直接读取空字符串。解决方法是使用 nextLine() 获取整数后的换行符,避免空字符导致的跳过输入现象。

当在调用 nextInt() 或者其他读取基本类型的方法(如 nextFloat() 等)后紧接着调用 nextLine() 方法时,可能会出现问题。因为 nextInt() 等方法读取数据后,留下的换行符(回车键对应的字符)会被 nextLine() 当作输入内容读取,导致 nextLine() 似乎'跳过'了用户的输入。解决办法通常是在调用 nextLine() 之前,先额外调用一次 nextLine() 来消耗掉前面留下的换行符,示例如下:

import java.util.Scanner;
public class NextLineIssue {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = scanner.nextInt();
        scanner.nextLine(); // 消耗掉换行符
        System.out.println("请输入一行文字:");
        String line = scanner.nextLine();
        System.out.println("你输入的文字内容是:" + line);
        scanner.close();
    }
}

总之,Scanner 类在 Java 中是很常用的用于处理输入的类,掌握好它的使用方法以及注意相关问题,能更好地实现具有交互性的 Java 程序。

目录

  1. 一、Scanner 类概述
  2. 二、Scanner 类的创建
  3. 三、常用方法及读取不同类型数据
  4. 四、可能遇到的问题及注意事项
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 私有化部署实战:在单张 4090 上运行 Llama-3 并服务业务
  • 计算机专业女生的职业发展方向与 Python 技能路径
  • 自然语言处理在客户服务领域的实战应用
  • 前缀和专题:和为 k 的子数组与和可被 k 整除的子数组
  • 医疗 AI 场景下的模型融合与集成策略
  • 插入排序原理及 Java 实现详解
  • Python+Flask 高校二手交易网站设计与实现
  • AI Agent 核心概念解析、与 RPA 差异及扣子平台实战指南
  • Ubuntu 安装 OpenClaw 网关服务报错 Gateway service check failed 解决方法
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署推理与微调实践
  • STC 单片机摄像头组别高效搜线算法与帧率优化思路
  • 基于大语言模型搭建私有化知识库
  • Python 自学完整学习路线:从基础语法到项目实战指南
  • 极空间部署 Miloco 全屋 AI 自动化方案
  • DeepSeek-R1 大模型基于 MS-Swift 框架部署推理与微调实践
  • Windows 环境 Git 安装与配置教程
  • Effective C++ 第六章:继承与面向对象设计
  • Web 安全漏洞挖掘实战经验与入门指南
  • 大模型、通用大模型与企业及垂直大模型的概念辨析
  • 大模型混战时代互联网企业的转型与应对策略

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online