笔试必备—Java输入输出流

Java 流

  • 流可以理解为一个数据,输入流表示从一个源读取数据,输出流表示向一个目标写数据

  • Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中

  • Scanner类 提供了一系列的方法,更加直观、易用性高,但 IO 流操作更加高效、灵活

1. 标准输入读取字符流

Java 的控制台输入由 System.in 完成

为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

2. 输入流分词成为标记

StreamTokenizer类,用于解析基本类型的输入流,将其分解成标记(tokens),可以是数字、字符串、标识符等

StreamTokenizer in = new StreamTokenizer(br);

通过使用 StreamTokenizer,我们可以方便地读取和解析控制台输入的数据

StreamTokenizer 类 字段
在这里插入图片描述

StreamTokenizer 类 方法
在这里插入图片描述

根据需求循环获取对应Token:

// 只要没遇到终止符号(ctrl + D)就一直获取
while (in.nextToken() != StreamTokenizer.TT_EOF) { // 这里根据需要循环 + nextToken()方法 获取需要的// 数值类型double n = in.nval;// 字符类型String str = in.sval;
}

获取之后,就可以编写具体的算法代码

3. 向标准输出写入字符流

为了向标准输出(这里指控制台)写入数据,我们使用 PrintWriter 类。

PrintWriter 类提供了一个简单的方法来输出数据,并且可以自动处理字符编码转换。

PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

4. 输出到控制台

使用 PrintWriter 的 print 和 println 方法进行输出,一定要记得刷新输出流到控制台,代码最后需要关闭输出流。

// 输出
out.print();
out.println();// 刷新和关闭输出流
out.flush();
out.close();

5. 用法示例

美团0810秋招第一题:

小美准备登录美团,需要输入密码,小美忘记了密码,只记得密码可能是 n个字符串中的一个。
小美会按照密码的长度从小到大依次尝试每个字符串,对于相同长度的字符串,小美随机尝试,并且相同的密码只会尝试一次。
小美想知道,她最少需要尝试多少次才能登录成功,最多需要尝试多少次才能登录成功。
小美不会重新尝试已经尝试过的字符串。成功登录后会立即停止尝试。
输入描述
第一行输入一个整数 n(1 <= n <= 1000)代表密码字符串的个数。
第二行输入一个只由小写字母组成的字符串 s(1<=|s|<=1000)代表正确的密码。
接下来 n 行,每行输入一个长度不超过 1000的字符串,代表小美记得的密码。
输出描述
在一行上输出两个整数,表示最少和最多尝试次数。
输入
4
ab
abc
ab
ac
ac
输出
1 2

public static void main(String[] args) throws IOException {// 最基本最简单的输出方法 但是没有 IO 流高效// Scanner scan = new Scanner(System.in);// int nums = scan.nextInt(); // 字符串个数// scan.nextLine(); // 消耗掉 nextInt 留下来的换行符// String ans = scan.nextLine(); // 正确答案BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));// 相同的密码只会尝试一次 所以使用 集合 接收字符串// 每种长度字符对应的哈希表:(字符长度 :字符集合)Map<Integer, Set<String>> pos = new HashMap<>();String ans = null;  // 正确答案序列while (in.nextToken() != StreamTokenizer.TT_EOF) {int n = (int) in.nval;in.nextToken();ans = in.sval;// 循环读取for (int i = 0; i < n; i++) {in.nextToken();String str = in.sval;// computeIfAbsent方法:如果指定的键不存在 则使用提供的映射函数新增,// 如果键存在,则什么都不做pos.computeIfAbsent(str.length(), k -> new HashSet<>()).add(str);}}// 算法int[] extracted = extracted(pos, ans);out.print(extracted[0] + " " +extracted[1]);
}private static int[] extracted(Map<Integer, Set<String>> pos, String ans) {// map 放入列表中, pos.entrySet() 返回 一个 Set集合List<Map.Entry<Integer, Set<String>>> sortedPos = new ArrayList<>(pos.entrySet());// 按照字符长度进行列表排序sortedPos.sort(Map.Entry.comparingByKey());// 遍历尝试 更新最小最大尝试次数int step = 0;int MIN = -1, MAX = -1;for (Map.Entry<Integer, Set<String>> entry : sortedPos) {Set<String> v = entry.getValue();if (v.contains(ans)) {// 这个长度下包含正确答案MIN = step + 1; // 第一次就试到了正确答案MAX = step + v.size(); // 所有字符都尝试一遍} else {// 这个长度下没有正确答案step += v.size(); // 需要从短的开始 所以全部都要尝试一遍}}return new int[]{MIN, MAX};
}

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

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

相关文章

【数学建模】趣味数模问题——四人追逐问题

问题描述&#xff1a; 如图所示&#xff0c;在正方形ABCD的四个顶点各有一个人。在初始时刻 t0 时&#xff0c;四人同时出发&#xff0c;以匀速 v 沿顺时针方向朝下一个人移动。如果他们始终对准下一个人为目标行进&#xff0c;最终结果会如何&#xff1f;需要作出各自的运动轨…

微信小程序 ==== 半屏打开小程序

目录 打开半屏小程序 调用流程 打开半屏小程序 半屏小程序环境判断 返回原小程序 使用限制 wx.openEmbeddedMiniProgram 功能描述 参数 wx.navigateBackMiniProgram 功能描述 示例代码 Object wx.getEnterOptionsSync() 功能描述 返回值 返回有效 referrerInfo…

计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Spring Boot集成Devtools实现热更新?

1.什么Devtools&#xff1f; DevTools是开发者工具集&#xff0c;主要用于简化开发过程中的热部署问题。 热部署是指在开发过程中&#xff0c;当代码发生变化时&#xff0c;无需手动重启应用&#xff0c;系统能够自动检测并重新加载修改后的代码&#xff0c;大大提高了开发效率…

UE基础 —— 关卡

目录 Working with Levels Managing Multiple Levels World Settings 更改默认关卡 关卡&#xff08;Level&#xff09;是游戏的"世界"的全部或部分&#xff1b;关卡包含玩家可以看到并与之交互的所有内容&#xff0c;如环境、可用对象、其他角色&#xff0c;等等…

理性看待、正确理解 AI 中的 Scaling “laws”

编者按&#xff1a;LLMs 规模和性能的不断提升&#xff0c;让人们不禁产生疑问&#xff1a;这种趋势是否能一直持续下去&#xff1f;我们是否能通过不断扩大模型规模最终实现通用人工智能&#xff08;AGI&#xff09;&#xff1f;回答这些问题对于理解 AI 的未来发展轨迹至关重…

郊游、旅游管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

【算法/学习】双指针

✨ 少年要迎着朝阳&#xff0c;活得肆无忌惮 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;算法学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &a…

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…

python爬虫滑块验证及各种加密函数(基于ddddocr进行的一层封装)

git链接: https://github.com/JOUUUSKA/spider_toolsbox 这里写目录标题 一.识别验证码1、识别英文&#xff0b;数字验证码2、识别滑块验证码3、识别点选验证码 二、下载系列1、下载视频2、下载图片3、下载文本 三、常用加密类型1、AES系列2、DES系列3、RSA系列4、SHA系列5、B…

【c++】深入理解别名机制--引用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、引用的概念和定义 二、引用的特性 三、引用的实用性 1.引用传参 2.引用做返回值 2.1 引用做返回值的作用 2.2 引用坍缩问题、悬挂引用问…

算法的学习笔记—合并两个排序的链表(牛客JZ25)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是经常遇到的考点之一&#xff0c;其中合并两个排序链表是一个非常经典的问题。本文将详细介绍如何通过递归和迭代两种方式实现两个有序链表的合并。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;合并…

Arduino开源四足蜘蛛机器人制作教程

视频教程&#xff1a;手把手叫你做四足蜘蛛机器人——1零件介绍_哔哩哔哩_bilibili 一、项目介绍 1.1 项目介绍 Arduino主控&#xff0c;图形化编程&#xff0c;趣味学习 Arduino nano开发板舵机扩展底板 4.8V可充电电池&#xff0c;支持Arduino C语言编程和米思齐图形化编程…

打卡学习Python爬虫第三天|爬取豆瓣电影Top250排行榜(附源码)

一、打开网页找到url 二、查看数据是否存在于网页源代码中 三、编写代码获取网页源代码 1、获取电影名称 注意正则表达式的使用&#xff0c;先观察网页源代码&#xff0c;我们发现每一部电影的数据存放在一个<li></li>中&#xff0c;如上图。并且我们要获取的电影…

el-image 图片预览时 与 el-table (或avue-crud) 样式冲突 的解决

问题: 解决 <style scoped> ::v-deep(.el-table__cell) {position: static !important; } </style> 后效果

二十二、状态模式

文章目录 1 基本介绍2 案例2.1 Season 接口2.2 Spring 类2.3 Summer 类2.4 Autumn 类2.5 Winter 类2.6 Person 类2.7 Client 类2.8 Client 类的运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 State ( 状态 )3.1.2 ConcreteState ( 具体的状态 )3.1.3 Context ( 上下文 )3.…

二叉树练习习题集一(Java)

1. 思路&#xff1a; 就是让左孩子和右孩子进行交换&#xff0c;这里需要一个中间变量用来记录&#xff0c;然后完成交换。如果进行优化则添加当左孩子和右孩子都为null时直接返回。 class Solution {public TreeNode invertTree(TreeNode root) {TreeNode tmpnull;//用来进行…

网络原理知识总结

一、网络模型 1.1 osi七层参考模型 物理层&#xff1a;连接通信链路、传输比特流数据链路层&#xff1a;数据封装成帧&#xff0c;在节点与节点间实现可靠物理地址寻址&#xff0c;进行差错校验、流量控制网络层&#xff1a;逻辑地址寻址&#xff0c;路由选择 IP(IPV4IPV6) I…

window.onload、$(document).ready()、Vue.created() 页面加载完成后执行方法

1、JavaScript 的 window.onload 方法 window.onload 方法是在页面所有元素&#xff08;包括图片、样式、链接等&#xff09;加载完成后触发的&#xff0c;在这个事件之前&#xff0c;页面上的所有资源都必须加载完成。因此&#xff0c;如果页面中包含大量的图片或其他资源&am…

【iOS】——响应者链和事件传递链

事件传递 事件传递流程 发生触摸事件后&#xff0c;系统会将该事件封装成UIEvent对象加入到一个由UIApplication管理的事件队列 UIApplication会从事件队列中取出最前面的事件&#xff0c;并将事件分发下去以便处理&#xff0c;通常&#xff0c;先发送事件给应用程序的主窗口…