从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

    • 我的 Java 学习路线
    • 安装 Java
    • Java 数据类型

    • Java 多版本配置
    • 面向对象

    • Java 核心类

    • IO

      • IO 介绍
      • File 对象介绍
      • InputStream
      • OutputStream
      • Decorator 模式
      • 读写 zip 文件
      • Properties 类
      • 读取 classpath 中的配置文件
      • 序列化与反序列化
      • Reader
      • Writer
      • PrintStream 和 PrintWriter
      • Scanner
        • Scanner 的常用方法
        • 实例
        • 为 String 创建 Scanner
        • Scanner 的工作原理
      • 使用 Files
      • Console
      • IO 系列小结
    • Java 与时间

    • 异常处理

    • 哈希和加密算法

    • Java8 新特性

    • 网络编程

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaSE
  • IO
2023-02-09
目录

Scanner

# Scanner

前面我们简单用了 java.util.Scanner 类,从控制台读取字符串和基本类型数值。例如,为了能从键盘读取,为 System.in 创建了一个 Scanner:

Scanner input = new Scanner(System.in);
int x = input.nextInt();
1
2

我们也可以使用 Scanner,从文件中读取数据:

Scanner input = new Scanner(new File(filename));
1

# Scanner 的常用方法

常用方法如下:

+Scanner(source: File)    :创建一个Scanner,从指定的文件中扫描标记
+Scanner(source: String)    :创建一个Scanner,从指定的字符串中扫描标记
+close()    :关闭该Scanner
+hasNext(): boolean    如果Scanner还有更多数据读取,则返回true
+next(): String    从该Scanner中读取下一个标记作为字符串返回
+nextLine(): String    从该Scanner中读取一行,以换行结束
+nextByte(): byte    从该Scanner中读取下一个标记作为byte值返回
+nextShort(): short    从该Scanner中读取下一个标记作为short值返回
+nextInt(): int    从该Scanner中读取下一个标记作为int值返回
+nextLone(): long    从该Scanner中读取下一个标记作为long值返回
+nextFloat(): float    从该Scanner中读取下一个标记作为float值返回
+nextDouble(): double    从该Scanner中读取下一个标记作为double值返回
+useDelimiter(pattern: String): Scanner    设置改Scanner的分割符,并且返回该Scanner
1
2
3
4
5
6
7
8
9
10
11
12
13

# 实例

下面的例子创建了一个 Scanner 的实例,并从文件 scores.txt 中读取数据。其中 scores.txt 里的内容是上一节 PrintWriter 写入的:

import java.util.Scanner; 

public class ReadData {
  public static void main(String[] args) throws Exception {
    // Create a File instance
    java.io.File file = new java.io.File("scores.txt");

    // Create a Scanner for the file
    Scanner input = new Scanner(file);

    // Read data from a file
    while (input.hasNext()) {
      String firstName = input.next();
      String mi = input.next();
      String lastName = input.next();
      int score = input.nextInt();
      System.out.println(
        firstName + " " + mi + " " + lastName + " " + score);
    }

    // Close the file
    input.close();
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 为 String 创建 Scanner

可以使用 Scanner 类从文件或者键盘读取数据。也可以使用 Scanner 类从一个字符串扫描数据。例如,下面代码

Scanner input = new Scanner("13 14");
int sum = input.nextlnt() + input.nextlnt();  //27
System.out.println("Sum is " + sum);
1
2
3

运行结果:Sum is 27

# Scanner 的工作原理

方法 nextByte()、nextShort() 、nextlnt()、 nextLong()、nextFloat()、nextDouble() 和 next() 等都称为标记读取方法( token-reading method),因为它们会读取用分隔符分隔开的标记。默认情况下,分隔符是空格。可以使用 useDelimiter(String regex) 方法设置新的分隔符模式。

一个输入方法是如何工作的呢?一个标记读取方法首先跳过任意分隔符(默认情况下是空格),然后读取一个以分隔符结束的标记。然后,对应于 nextByte()、nextShort() 、nextlnt()、 nextLong()、nextFloat() 和 nextDouble() 这个标记就分别被自动地转换为 1 个 byte, short、int、long、float 或 double 型的值。对于 next() 方法而言是无须做转换的。如果标记和期望的类型不匹配,就会抛出一个运行异常 java.util.InputMismatchException()

方法 next() 和 nextLine() 都会读取一个字符串。next() 方法读取一个由分隔符分隔的字符串,但是 nextLine() 读取一个以换行符结束的行。

注意:行分隔符字符串是由系统定义的,在 Windows 平台上\r\n, 而在 UNIX 平台上是 \n。为了得到特定平台上的行分隔符,使用

String lineSeparator = System.getProperty("line.separator");
1

如果从键盘输入,每行就以回车键(Enter key) 结束,它对应于\n 字符。

标记读取方法不能读取标记后面的分隔符。如果在标记读取方法之后调用 nextLine(),该方法读取从这个分隔符开始,到这行的行分隔符结束的字符。这个行分隔符也被读取,但是它不是 nextLine() 返回的字符串部分

假设一个名为 test.txt 的文本文件包含一行

34 567
1

在执行完下面的代码之后,intValue 的值为 34, 而 line 包含的字符是' ', '5', '6', '7'

Scanner input = new Scanner(new File(test.txt));
int intValue = input.nextInt();
String line = input.nextLine();
1
2
3

如果从键盘键入,那会发生什么呢?假设为下面的代码输入 34, 然后按回车键,接着输入 567 然后再按回车键:将会得到 intValue 值是 34, 而 line 中是一个空的宇符串。这是为什么呢?标记读取方法 nextlnt() 读取 34, 然后在分隔符处停止,这里的分隔符是行分隔符(回车键)。nextLine() 方法会在读取行分隔符之后结束,然后返回在行分隔符之前的字符串。因为在行分隔符之前没有字符,所以 line 是空的。

Scanner input = new Scanner(System.in);
int intValue = input.nextInt();
String line = input.nextLine();
1
2
3
上次更新: 2024/10/1 21:14:36
PrintStream 和 PrintWriter
使用 Files

← PrintStream 和 PrintWriter 使用 Files→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式