Java 的 Scanner 类:控制台输入与文件扫描

Java 的 Scanner 类是一个非常方便的工具类,主要用于从控制台或文件中扫描输入数据。虽然它也可以用于扫描文件内容,但我们通常更喜欢它用于控制台输入,因为扫描文件可以通过文件流来完成。接下来,我们将通过几个简单的示例来讲解 Scanner 类的使用。

1 扫描控制台输入

通常,我们会使用 Scanner 类来扫描控制台输入,这对于初学 Java 的人来说非常有用,因为它可以轻松地获取用户输入的数据。

示例 1:基本输入

import java.util.Scanner;public class ConsoleInputExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象,从标准输入流中读取数据System.out.print("请输入一个整数:");int num = scanner.nextInt(); // 获取用户输入的整数System.out.println("您输入的整数是:" + num);scanner.nextLine(); // 读取换行符,避免影响下一次读取System.out.print("请输入一个字符串:");String str = scanner.nextLine(); // 获取用户输入的字符串System.out.println("您输入的字符串是:" + str);scanner.close(); // 关闭 Scanner 对象}
}

在这个示例中,我们创建了一个 Scanner 对象,并使用 nextInt() 方法读取用户输入的整数,使用 nextLine() 方法读取用户输入的字符串。注意,在读取整数后,我们需要调用 nextLine() 方法来读取换行符,以避免影响下一次读取。

示例 2:多行输入

import java.util.Scanner;public class MultiLineInputExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象,从标准输入流中读取数据System.out.println("请输入多行文本,以空行结束:");StringBuilder sb = new StringBuilder(); // 创建 StringBuilder 对象,用于保存读取的文本String line = scanner.nextLine(); // 读取输入流中的第一行while (!line.isEmpty()) { // 如果读取的行不为空,则继续读取下一行sb.append(line).append("\n"); // 将当前行的内容添加到 StringBuilder 对象中,并换行line = scanner.nextLine(); // 读取下一行}System.out.println("您输入的文本是:\n" + sb.toString()); // 打印读取的文本scanner.close(); // 关闭 Scanner 对象}
}

在这个示例中,我们使用 nextLine() 方法读取多行文本,直到用户输入空行为止。

示例 3:其他常用方法

import java.util.Scanner;public class ScannerMethodsExample {public static void main(String[] args) {Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象,从标准输入流中读取数据System.out.print("请输入一个整数:");if (scanner.hasNextInt()) { // 判断输入流中是否有下一个整数int num = scanner.nextInt(); // 读取输入流中的下一个整数System.out.println("您输入的整数是:" + num);} else {System.out.println("输入的不是整数!");}scanner.nextLine(); // 读取输入流中的换行符System.out.print("请输入多个单词,以空格分隔:");while (scanner.hasNext()) { // 判断输入流中是否还有下一个标记String word = scanner.next(); // 读取输入流中的下一个单词System.out.println("您输入的单词是:" + word);}scanner.nextLine(); // 读取输入流中的换行符System.out.print("请输入一个实数:");if (scanner.hasNextDouble()) { // 判断输入流中是否有下一个实数double num = scanner.nextDouble(); // 读取输入流中的下一个实数System.out.println("您输入的实数是:" + num);} else {System.out.println("输入的不是实数!");}scanner.nextLine(); // 读取输入流中的换行符System.out.print("请输入一个字符串:");if (scanner.hasNextLine()) { // 判断输入流中是否有下一行String line = scanner.nextLine(); // 读取输入流中的下一行System.out.println("您输入的字符串是:" + line);} else {System.out.println("输入的不是字符串!");}scanner.close(); // 关闭 Scanner 对象}
}

在这个示例中,我们展示了 Scanner 类的其他常用方法,如 hasNextInt()hasNext()hasNextDouble()hasNextLine()

2 扫描文件

Scanner 类也可以用于扫描文件内容,以下是一个简单的示例:

示例 1:逐行读取文件

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;public class FileScannerExample {public static void main(String[] args) {try {// 创建 File 对象,表示要扫描的文件File file = new File("docs/安装环境.md");Scanner scanner = new Scanner(file); // 创建 Scanner 对象,从文件中读取数据while (scanner.hasNextLine()) { // 判断文件中是否有下一行String line = scanner.nextLine(); // 读取文件中的下一行System.out.println(line); // 打印读取的行}scanner.close(); // 关闭 Scanner 对象} catch (FileNotFoundException e) {System.out.println("文件不存在!");}}
}

在这个示例中,我们创建了一个 File 对象,表示要扫描的文件。然后,我们使用 Scanner 类的构造方法来创建 Scanner 对象,并将文件作为参数传递给构造方法。在 while 循环中,我们使用 hasNextLine() 方法来判断文件中是否有下一行,如果有,则使用 nextLine() 方法读取该行字符串,并使用 println() 方法将其打印出来。最后,我们在程序结束前使用 close() 方法关闭 Scanner 对象。

示例 2:读取整个文件内容

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;public class WholeFileScannerExample {public static void main(String[] args) {try {// 创建 File 对象,表示要扫描的文件Scanner scanner = new Scanner(new File("docs/安装环境.md")); // 创建 Scanner 对象,从文件中读取数据scanner.useDelimiter("\\Z"); // 设置分隔符为文件结尾if (scanner.hasNext()) { // 判断文件中是否有下一行String content = scanner.next(); // 读取文件中的下一行System.out.println(content); // 打印读取的行}scanner.close(); // 关闭 Scanner 对象} catch (FileNotFoundException e) {System.out.println("文件不存在!");}}
}

在这个示例中,我们使用 useDelimiter("\\Z") 方法将分隔符设置为文件结尾,以便读取整个文件内容。

3 查找匹配项

Scanner 类还提供了一些以 find 开头的方法,用于查找匹配项。以下是一些示例:

示例 1:查找字符串中的单词

import java.util.Scanner;public class FindExample {public static void main(String[] args) {String input = "good good study, day day up.";Scanner scanner = new Scanner(input);String result;// 使用 findInLine() 方法查找字符串中的单词result = scanner.findInLine("study");System.out.println("findInLine(): " + result); // 输出 "study"// 使用 findWithinHorizon() 方法查找字符串中的单词scanner = new Scanner(input);result = scanner.findWithinHorizon("study", 20);System.out.println("findWithinHorizon(): " + result); // 输出 "study"scanner.close(); // 关闭 Scanner 对象}
}

在这个示例中,我们使用 findInLine() 方法和 findWithinHorizon() 方法分别查找字符串中的单词 “study”。

示例 2:使用正则表达式查找文件中的关键字

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Pattern;public class RegexFindExample {public static void main(String[] args) {try {// 创建 File 对象,表示要扫描的文件Scanner scanner = new Scanner(new File("docs/安装环境.md")); // 创建 Scanner 对象,从文件中读取数据Pattern pattern = Pattern.compile("op..jdk");String result;while ((result = scanner.findWithinHorizon(pattern, 0)) != null) {System.out.println("findWithinHorizon(): " + result);}scanner.close(); // 关闭 Scanner 对象} catch (FileNotFoundException e) {System.out.println("文件不存在!");}}
}

在这个示例中,我们使用正则表达式 op..jdk 来查找文件中的关键字 “openjdk”。

4 小结

总之,Scanner 类是一个功能强大的输入处理工具类,不仅可以扫描控制台的输入流,还可以扫描文件,并且提供了多种方法来读取不同类型的数据,如 next()nextInt()nextLine()nextDouble() 等。此外,还可以通过 useDelimiter() 方法设置分隔符,通过 findInLine()findWithinHorizon() 方法查找匹配项等。熟练掌握 Scanner 类的使用,将极大地提高我们在处理输入数据时的效率和灵活性。

5 思维导图

在这里插入图片描述

6 参考链接

Java Scanner:金控控制台输入,还能扫描文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9810.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

安卓市场如何做APP的分发、推广?

今天主要跟大家分享一些分发、推广这块操作的内容以及对安卓用户的一些理解。 分发的日常生活:“某渠道怎样怎样,应用宝是不是要加点预算,OPPO是不是要加点预算,你的成本又高了,华为又掉注册,应用宝又掉注册…

基于JavaWeb的图书售卖网站(源码+部署+LW)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于JavaWeb的图书售卖网…

高级 <HarmonyOS主题课>构建华为支付服务的课后习题

五色令人目盲&#xff1b; 五音令人耳聋&#xff1b; 五味令人口爽&#xff1b; 驰骋畋猎&#xff0c;令人心发狂&#xff1b; 难得之货&#xff0c;令人行妨&#xff1b; 是以圣人为腹不为目&#xff0c;故去彼取此。 本篇内容主要来自&#xff1a;<HarmonyOS主题课>构建…

python全栈开发《63.判断两个集合中是否有相同的元素》

目录 1.isdisjoint的功能2.isdisjoint的用法3.代码 1.isdisjoint的功能 判断两个集合是否包含相同的元素。如果没有&#xff0c;返回True&#xff1b;如果有&#xff0c;返回False。 2.isdisjoint的用法 a_set {name,xiaomu,xiaoming} b_set {xiaoming,xiaogang,xiaohong} re…

员工管理系统(python)

利用python的自定义函数以及循环函数写一个小的员工管理系统&#xff0c;以下是详细代码&#xff1a; # 定义一个空的员工列表&#xff0c;用于存储员工信息 list_ems []# 添加员工的函数 def add():# 提示用户输入员工的各项信息employee_id input("请输入员工的工号&…

做AI大模型应用层产品研发,基本绕不开这几个大模型API

国内有不少独立模型厂商提供 API 可供调用&#xff0c;几乎都会成为技术选择的可选项&#xff1a; Moonshot AI&#xff1a; API 特点&#xff1a;其 API 与 OpenAI 兼容&#xff0c;方便开发者平滑迁移&#xff0c;开发者无需对代码做除基本参数外的“额外”修改&#xff0c;…

MySQL数据库专栏(五)连接MySQL数据库C API篇

摘要 本篇文章主要介绍通过C语言API接口链接MySQL数据库&#xff0c;各接口功能及使用方式&#xff0c;辅助类的封装及调用实例&#xff0c;可以直接移植到项目里面使用。 目录 1、环境配置 1.1、添加头文件 1.2、添加库目录 2、接口介绍 2.1、MySql初始化及数据清理 2.1.…

Ubuntu系统被木马程序攻击,运行莫名进程杀掉又自动重启解决办法

问题&#xff1a;Ubuntu系统被攻击了&#xff0c;有莫名进程运行杀掉又自动重启。 原因&#xff1a;攻击原因估计是用户名和密码过于简单&#xff0c;ssh服务穿透时等被暴力破解了。 nvidia-smi&#xff1a;存在莫名的./java程序&#xff0c;kill掉也会重启其它木马进程&#…

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【MySQL】函数

3.函数 MySQL中的函数主要分为以下四类&#xff1a; 字符串函数、数值函数、日期函数、流程函数。 3.1 字符串函数 演示如下&#xff1a; A. concat : 字符串拼接 select concat(Hello , MySQL);B. lower : 全部转小写 select lower(Hello);C. upper : 全部转大写 select…

Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具

背景 项目需要在首页弹一系列弹窗&#xff0c;每个弹窗是否弹出都有自己的策略&#xff0c;以及哪个优先弹出&#xff0c;哪个在上一个关闭后再弹出&#xff0c;为了更好管理&#xff0c;于是封装了一个Dialog管理工具 效果 整体采用责任链模块设计&#xff0c;控制优先级及弹…

【实战篇P2-5】手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第五节-编写Android手机APP程序实现接入原子云服务器

使用的开发软件是Android studio Android SDK(运行环境 :最低版本 21(Android 5.0) 最高版本 29 (Android 9.0) Gradle 版本 :4.6 根据源码,可自定义修改界面,修改名称,根据需求自定义数据展示界面等,修改app图标及名称等。 目录 Android程序设计 Android…

2024双十一数码好物推荐?双十一超值数码好物汇总别错过!

随着2024年双十一购物狂欢节临近尾声&#xff0c;各大电商平台的促销活动已经进入了最后的冲刺阶段。在这场年度最大的购物盛宴中&#xff0c;数码产品无疑是消费者关注的焦点。无论是提升工作效率的电脑、平板&#xff0c;还是丰富娱乐生活的手机、耳机&#xff0c;各大品牌纷…

Android V 挂起线程超时导致system_server挂掉

问题背景 最近Android v的平台频繁爆monkey异常停止的问题,分析到根因不是频繁dump堆栈导致system_server挂掉就是三方应用进程内部死锁导致anr,然后system_server挂起线程超时,system_server就崩了。 解决方案 先来看看anr导致死锁的场景如何分析 从log来看确认为syste…

评估 机器学习 回归模型 的性能和准确度

回归 是一种常用的预测模型&#xff0c;用于预测一个连续因变量和一个或多个自变量之间的关系。 那么&#xff0c;最后评估 回归模型 的性能和准确度非常重要&#xff0c;可以帮助我们判断模型是否有效并进行改进。 接下来&#xff0c;和大家分享如何评估 回归模型 的性能和准…

图片循环轮播,悬停停止

可直接执行HTML 代码 template 代码在下面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Swip…

Transformer介绍(一)

Transformer是一种特殊的神经网络&#xff0c;一种机器学习模型。 谷歌在2017年推出的原版Transformer&#xff0c;论文《Attention Is All You Need》&#xff0c;专注于将一种语言的文本翻译成另一种。 而我们要关注的Transformer变种&#xff0c;即构建ChatGPT等工具的模型…

MySQL之索引(1)(索引概念与作用、红黑树、b树、b+树)(面试高频)

目录 一、索引的概念、作用。 &#xff08;1&#xff09;介绍。 &#xff08;2&#xff09;为啥索引能优化sql查询&#xff1f; 1、某张表(emp)结构以及数据如下。 2、假如执行的SQL语句为&#xff1a;select * from emp where empno7844; 3、对比与总结。 &#xff08;3&#…

pytest+request+allure接口自动化框架搭建分享

介绍分享一个接口自动化框架搭建方法 (pytestrequestallure)&#xff0c;这个方案是由 xpcs 同学在TesterHome社区网站的分享。 写在前面 去年11月被裁&#xff0c;到现在还没上岸&#xff0c;gap 半年了。上岸无望&#xff0c;专业技能不能落下&#xff0c;花了两三天时间&…

Linux之gdb的收尾部分

Linux之gdb的收尾部分 gbc常见指令的使用 gdb的调试