Scanner工具类

扫描控制台输入

1.nextLine

   nextLine() 方法会扫描输入流中的字符,直到遇到行末尾的换行符 \n,然后将该行的内容作为字符串返回,同时,nextLine() 会将 Scanner 对象的位置移动到下一行的开头,以便下一次读取数据时从下一行的开头开始读取。

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 对象

2.nextInt

   nextInt() 用于从输入流中读取下一个整数并返回,如果输入流中没有整数,或者不是整数,将抛出 InputMismatchException 异常。

3.其他方法

除了以上两个常用的方法,Scanner 类中还有一些其他的方法:

  • boolean hasNext():检查输入流是否还有下一个标记。
  • boolean hasNextLine():检查输入流是否还有下一行。
  • String next():读取输入流中的下一个标记(使用默认的分隔符,通常是空格或换行符)。
  • double nextDouble():读取输入流中的下一个双精度浮点数。
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 对象

扫描文件

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 对象.

查找匹配项

 实例:

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 对象

        在上面的示例中,我们首先创建了一个字符串 input,表示要查找的文本。然后,我们使用 Scanner 类的构造方法创建 Scanner 对象,并将 input 作为输入流传递给该对象。接着,我们使用 findInLine() 方法和 findWithinHorizon() 方法分别查找字符串中的单词 "study"。其中,findInLine() 方法在当前行中查找匹配项,而 findWithinHorizon() 方法在指定的限制范围内查找匹配项。在本例中,我们将查找的范围限制为前 20 个字符。

        需要注意的是,findInLine() 方法和 findWithinHorizon() 方法都返回找到的匹配项。如果没有找到匹配项,则返回 null。此外,findInLine() 方法和 findWithinHorizon() 方法都会忽略默认的分隔符,因此需要使用正则表达式来指定查找的模式。

小结

        总之,Scanner 类是一个功能强大的输入处理工具类,不仅可以扫描控制台的输入流,还可以扫描文件,并且提供了多种方法来读取不同类型的数据,比如 next()nextInt()nextLine()如, nextDouble() 等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录day09 151.翻转字符串里的单词 、卡码网:55.右旋转字符串

代码随想录day09 151.翻转字符串里的单词 、卡码网:55.右旋转字符串 151. 反转字符串中的单词 这题我直接想到的是istringstream 和 stack 但不知道这样使用是不是违反了规定 class Solution { public:string reverseWords(string s) {istringstream iss(s);stri…

MySQL的约束键多表查询

约束 概念 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据中数据的正确、有效性和完整性。 外键约束 概念 ​ 外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。 注意&#x…

Qt常用基础控件总结—输入部件(QComboBox类和QLineEdit)

输入部件 下拉列表控件QComboBox 类 QComboBox 类是 QWidget 类的直接子类,该类实现了一个下拉列表(组合框)。 QComboBox 类中的属性函数 1)count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空组合框或未设置当前项目的组合框,…

网络安全法视角下的等保测评法律责任与风险控制

《网络安全法》是中国为了保障网络安全、维护网络空间主权和国家安全、社会公共利益,保护公民、法人和其他组织的合法权益而制定的一部重要法律。该法于2017年6月1日正式实施,其中对网络安全等级保护制度(简称“等保”)做出了明确…

windows USB 设备驱动开发-USB复合设备的注册

USB 多功能设备的驱动程序(称为复合驱动程序)可以向基础 USB 驱动程序堆栈注册和注销复合设备。 Microsoft 提供的驱动程序(Usbccgp.sys)是由 Windows 加载的默认复合驱动程序。 本文中的过程适用于替换Usbccgp.sys的基于 WDM的自…

c语言的简易教法—— 函数递归

文章目录 一、什么是递归?1.1递归的思想1.2递归的限制条件 二、递归案例2.1 案例1:求n的阶层2.1.1分析2.1.2 递归函数(Fact)的代码实现2.1.3 测试:main函数实现2.1.4 运行结果和画图推演2.1.5 扩展:迭代方法…

【66个开源+44个闭源Agent项目】

开源AI Agent 1.AgentGPT 基于浏览器的 AutoGPT 实现,可通过无代码平台访问。https://agentgpt.reworkd.ai/zh 2.AI Legion 一个让智能体协同工作的平台,其类似于 AutoGPT 和 Baby AGI,但用 TypeScript 编写。https://github.com/eumemi…

如何使用BERT进行下游任务 - Transformer教程

BERT,即Bidirectional Encoder Representations from Transformers,是谷歌于2018年发布的预训练语言模型。BERT的出现标志着自然语言处理领域的一个重要里程碑,因为它大幅提高了多种语言任务的性能。本文将详细介绍如何使用BERT进行下游任务&…

华为如何做成数字化转型?

目录 企业数字化转型是什么? 华为如何定义数字化转型? 为什么做数字化转型? 怎么做数字化转型? 华为IPD的最佳实践之“金蝶云” 企业数字化转型是什么? 先看一下案例,华为经历了多次战略转型&#xf…

前端工程化:Webpack配置全攻略

前端工程化:Webpack配置全攻略 前端小伙伴们,今天我们来聊聊那个让人又爱又恨的 Webpack。没错,就是那个配置起来让你想砸键盘,但又离不开它的构建工具。别担心,跟着我来,保证让你从 Webpack 小白变成配置…

人脸识别与检测(保姆级教程--附带源码)

人脸识别与检测(保姆级教程–附带源码) 项目背景 因项目需要招聘了一些日结工人,因此需要对工地现场的工人进行考勤管理,但工地只有海康摄像头没有专业考勤设备,因此需要基于视频流开发人脸识别与检测功能&#xff1…

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置,点击【下一步】4.等待提取安装程序5.默认安装位置,点击【下一步】6.等待安装7.安装成功,点击【关闭】 二、部署TomcatTomcat主要特点包括:…

奇怪的错误记录

https://github.com/meta-llama/llama3/issues/80 读模型没问题,推理时出现: RuntimeError: “triu_tril_cuda_template” not implemented for ‘BFloat16’ ———————————————— 事发原因 我尝试了解transformers的AutoProcessor时&a…

感应触摸芯片集成为MCU,深度应用触控按键技术的VR眼镜

VR(Virtual Reality)即虚拟现实,简称VR,其具体内涵是综合利用计算机图形系统和各种现实及控制等接口设备,在计算机上生成的、可交互的三维环境中提供沉浸感觉的技术。它的工作原理是将左右眼图像交互显示在屏幕上的方式…

技术速递|宣布为 .NET 升级助手提供第三方 API 和包映射支持

作者:Marco Goertz 排版:Alan Wang .NET 升级助手是一个 Visual Studio 扩展和命令行工具,可帮助您将应用从之前的 .NET 和 .NET Framework 升级到最新版本的 .NET。正如我们在之前的文章中所描述的那样,它为升级 Microsoft 库和框…

技术总结(1)——方向与成长思考

不知不觉已经发了30篇技术博客,本来最开始想的是回顾自己的技术生涯,怎样做到失败的生涯,但是后面发现,开始逐步写技术博客,慢慢的开始沉浸里面这种回顾技术的感觉。做技术的人通常不喜欢研究市场,而做市场…

模型剪枝知识点整理

模型剪枝知识点整理 剪枝是深度学习模型优化的两种常见技术,用于减少模型复杂度和提升推理速度,适用于资源受限的环境。 剪枝(Pruning) 剪枝是一种通过移除模型中不重要或冗余的参数来减少模型大小和计算量的方法。剪枝通常分为…

编程是学什么:探索编程世界的四大核心领域

编程是学什么:探索编程世界的四大核心领域 在数字化时代的浪潮中,编程已成为一项重要的技能。但很多人对于编程的学习内容仍然感到困惑,那么,编程究竟是学什么呢?本文将从四个方面、五个方面、六个方面和七个方面&…

探索TASKCTL和 DataStage 的ETL任务调度协同

在复杂多变的企业环境中,高效、准确的数据处理是支撑业务决策与运营的核心。本文将深入探讨任务调度平台TASKCTL与ETL工具DataStage的深度融合,通过详尽的代码示例、结合细节以及实际案例的具体描述,展示这两个工具如何携手打造企业数据处理生…

Xcode构建设置自定义:打造个性化的编译环境

标题:Xcode构建设置自定义:打造个性化的编译环境 在软件开发过程中,根据不同的开发阶段和需求,经常需要调整编译设置以优化构建过程。Xcode作为苹果官方的集成开发环境(IDE),提供了丰富的自定义…