(每日持续更新)jdk api之StringReader基础、应用、实战

news2024/11/20 3:22:59

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程

 

1.72 StringReader

基本概念

StringReader 是 Java 中用于读取字符串的字符流读取器。它实现了 Reader 接口,允许你从一个字符串中以字符的形式读取数据。下面是对 StringReader 的属性、方法和一个简单的示例的介绍:

属性:
  • 无特定属性,但是继承了 Reader 的属性。

方法:
  1. int read():读取单个字符,并返回读取的字符的 Unicode 值。如果已经到达字符串的末尾,则返回 -1。

  2. int read(char[] cbuf, int off, int len):将字符读入数组。尝试读取 len 个字符,并将它们存储到字符数组中,从 off 位置开始存储。返回实际读取的字符数,如果已经到达字符串的末尾,则返回 -1。

  3. boolean ready():检查是否可以读取字符,返回 true 如果可以,否则返回 false。

  4. void close():关闭此流并释放与之关联的所有系统资源。

小例子:
javaCopy code
import java.io.StringReader;
import java.io.IOException;
​
public class StringReaderExample {
    public static void main(String[] args) {
        String data = "Hello, world!";
        try (StringReader reader = new StringReader(data)) {
            int character;
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们使用 StringReader 来读取字符串 "Hello, world!" 中的字符,并将它们逐个打印到控制台上。

应用场景

StringReader 主要用于在内存中读取字符串数据,常见的应用场景包括:

  1. 字符串解析和处理: 当你需要从一个字符串中按字符顺序读取数据并进行解析或处理时,可以使用 StringReader

  2. 单元测试: 在单元测试中模拟输入数据时,可以使用 StringReader 将字符串作为输入提供给被测试的代码。

  3. 配置文件解析: 在某些情况下,配置信息以字符串的形式存在,你可以使用 StringReader 读取这些配置信息并进行解析。

  4. 文本处理和分析: 当需要对一个字符串进行分词、统计字符出现次数等文本处理操作时,StringReader 可以帮助你逐字符地读取字符串。

下面是几个应用场景的代码实现示例:

字符串解析和处理
javaCopy code
import java.io.StringReader;
import java.io.IOException;
​
public class StringReaderExample {
    public static void main(String[] args) {
        String data = "1,2,3,4,5";
        try (StringReader reader = new StringReader(data)) {
            int character;
            while ((character = reader.read()) != -1) {
                // 在这里可以进行字符的处理操作,比如按照逗号分割字符串
                if ((char) character != ',') {
                    System.out.print((char) character);
                } else {
                    System.out.println(); // 每次遇到逗号换行
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
单元测试
javaCopy code
import java.io.StringReader;
import java.io.IOException;
​
public class StringReaderUnitTest {
    public int countWords(String text) throws IOException {
        int count = 0;
        try (StringReader reader = new StringReader(text)) {
            int character;
            boolean inWord = false;
            while ((character = reader.read()) != -1) {
                char c = (char) character;
                if (Character.isLetterOrDigit(c)) {
                    if (!inWord) {
                        count++;
                        inWord = true;
                    }
                } else {
                    inWord = false;
                }
            }
        }
        return count;
    }
​
    public static void main(String[] args) {
        StringReaderUnitTest unitTest = new StringReaderUnitTest();
        String text = "This is a test sentence.";
        try {
            int wordCount = unitTest.countWords(text);
            System.out.println("Word count: " + wordCount);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这些示例展示了如何在不同的场景下使用 StringReader 进行字符串处理和单元测试。

实战例子

在实际项目中,StringReader 可以与其他组件和功能结合使用,以下是一个简单的示例,展示了如何在一个基本的文本处理应用中使用 StringReader

假设我们有一个需求,需要读取一个包含学生姓名和成绩的文本文件,然后计算每个学生的平均成绩。我们将演示如何使用 StringReader 读取文件中的文本数据,并进行相应的处理。

javaCopy code
import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;
​
public class StudentGradeCalculator {
    public static void main(String[] args) {
        // 模拟从文件中读取的文本数据
        String data = "Alice 90\nBob 85\nCharlie 95";
​
        try (StringReader stringReader = new StringReader(data);
             BufferedReader reader = new BufferedReader(stringReader)) {
​
            String line;
            while ((line = reader.readLine()) != null) {
                // 按照空格分割每一行的数据,第一个元素是学生姓名,第二个元素是成绩
                String[] parts = line.split(" ");
                String studentName = parts[0];
                int score = Integer.parseInt(parts[1]);
​
                System.out.println("Student: " + studentName + ", Score: " + score);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在这个示例中,我们使用 StringReader 来模拟从文件中读取的文本数据,并将其传递给 BufferedReader 进行逐行读取。然后,我们按照每一行的格式解析学生姓名和成绩,最后打印出每个学生的姓名和成绩。

在实际项目中,你可以进一步扩展这个示例,例如:

  • 将学生姓名和成绩存储在对象中,以便进一步处理或持久化。

  • 添加计算平均成绩的功能。

  • 使用真实的文件而不是硬编码的字符串数据。

  • 错误处理和异常处理机制,以应对文件读取或数据解析过程中可能出现的问题。

这个示例展示了如何在一个简单的项目中使用 StringReader 进行文本数据的读取和处理,你可以根据实际需求进行进一步的扩展和定制。

 

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

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

相关文章

LeetCode 面试经典150题 121.买卖股票的最佳时机

题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…

数学建模——蒙特卡洛法

目录 1.介绍2.可以做的题型3.实战3.1求pi的值3.2求定积分x^2 的值 参加了大大小小很多场比赛了,但是都是混子,但还是打算记录一下吧,系统认真过一遍。后续功力深厚,会拓展写的文章,目前是干货,一些背景啥的…

蓝桥杯刷题(十)

1.翻转 代码 输入数据,每组数据进行比较,j的范围掐头去尾,若a[j]b[j],继续,若出现010,101子串则改成000,111,遍历完后比较a是否等于b,相同则输出次数,不同则输出-1。 for _ in ran…

CSS概念及入门

文章目录 1. CSS 概念及入门1.1. 简介1.2. 组成1.2.1. 选择器1.2.2. 属性 1.3. 区别 2. CSS 引入方式2.1. 行内样式2.1.1. 语法2.1.2. 特点 2.2. 内部样式2.2.1. 语法2.2.2. 特点 2.3. 外部样式2.3.1. 特点 2.4. 三种引入优先级 1. CSS 概念及入门 1.1. 简介 CSS 的全称为&am…

打破传统,拥抱未来:解锁企业数字化转型成功的11把金钥匙

数字化转型是一个持续的过程,需要企业不断地适应新技术和市场变化。企业如何提高转型成功的可能性,并在竞争激烈的市场中保持领先地位。今天我们来解锁企业数字化转型成功的11把金钥匙。 清晰的战略目标: 首先,企业需要明确数字化…

Python基础(八)之流程控制

Python基础(八)之流程控制 Python控制流程分为三种接口: 顺序结构选择结构循环结构 1、顺序结构 程序代码自上而下运行,逐条执行每一条Python代码,不重复执行任何代码,也不会跳过任何代码。 当语句与语…

基于JavaWeb+SSM+Vue“鼻护灵”微信小程序系统的设计和实现

基于JavaWebSSMVue“鼻护灵”微信小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图 滑到文末获取源码 Lun文目录 摘 要 3 Abstract 1 1 绪 论 1 1.1研究背景 1 工作的效率。 1 1.2 研究意义 1 1.3研究现状 1 1.4本文组织结构 2 2 技术介绍 3 2…

揭秘Facebook:数字世界的引领者

在当今数字化社会中,Facebook作为全球最大的社交媒体平台之一,扮演着引领者的角色。它不仅改变了人们的社交方式,还深刻影响着信息传播、商业模式和社会责任。本文将深入揭秘Facebook背后的故事,探索其在数字世界中的引领地位和影…

腾轩科技传媒教你如何精准制定营销策划方案,网络营销八法攻略!

整合营销是一种利用各种营销手法和渠道,将企业产品或服务全方位推广给目标消费者的营销方式。整合营销的目的是通过协调不同的营销手段和渠道,实现更高效的品牌传播和营销效果。腾轩科技传媒教你如何精准制定营销策划方案,网络营销八法攻略&a…

关 于 重 燃 学 习 的 热 情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻,我这10天的感觉和在家的感觉发生了翻天覆地的变化,最明显的莫过于学习状态的改变。 倒不是说在家学的不好,而是说在学校,我对学习的整体感觉,以及专注程度&…

PyTorch深度学习实战(39)——小样本学习

PyTorch深度学习实战(39)——小样本学习 0. 前言1. 小样本学习简介2. 孪生网络2.1 模型分析2.2 数据集分析2.3 构建孪生网络 3. 原型网络3. 关系网络小结系列链接 0. 前言 小样本学习 (Few-shot Learning) 旨在解决在训练集中只有很少样本的情况下进行分…

边缘计算+WEB端应用融合:AI行为识别智能监控系统搭建指南 -- 云端系统数据库设计(五)

专栏目录 边缘计算WEB端应用融合:AI行为识别智能监控系统搭建指南 – 整体介绍(一) 边缘计算WEB端应用融合:AI行为识别智能监控系统搭建指南 – 边缘设备图像识别及部署(二) 边缘计算WEB端应用融合&#xf…

不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问

今天新建共享发现了这个问题,用了网上的组策略之后还是不能访问共享 最后发现原因是共享设置中选择了无密码登录 选择有密码保护的共享,客户端输入ip后,用户名输入Administrator,密码为空(我的文件服务器是联想的win1…

LabVIEW飞机液压基础试验台测试系统

LabVIEW飞机液压基础试验台测试系统 为解决飞机液压基础实验台人工控制操作复杂、测试时间长、测试流程易出错等问题,开发了一套基于LabVIEW的飞机液压基础试验台测试系统。该系统通过计算机控制,实现了高度自动化的测试流程,有效提高了测试…

【tls招新web部分题解】

emowebshell (php7.4.21版本漏洞) 非预期 题目提示webshell,就直接尝试一下常见的后门命名的规则 如 shell.php这里运气比较好,可以直接shell.php就出来 要是不想这样尝试的话,也可以直接dirsearch进行目录爆破 然后在phpinfo中直接搜素c…

【Spring 篇】SpringMVC拦截器:给你的应用增添色彩

嗨,亲爱的小伙伴们!欢迎来到这段关于SpringMVC拦截器的奇妙之旅。今天我们要一探究竟,深入挖掘拦截器的神秘面纱,看看它是如何在你的应用中悄然发挥作用的。别怕,我会用最通俗易懂的语言,一步一步带你走进这…

Python-GEE绘制DEM精美图片

目录 上传矢量和DEM获取添加颜色条参考文章 先连接上GEE的自己的项目 import ee import geemap geemap.set_proxy(port33210) ee.Authenticate() ee.Initialize(projecta-flyllf0313)上传矢量和DEM获取 使用Google Earth Engine(GEE)和Google Earth Eng…

把软件加入开机自启动

注意这个方法最佳效果是适用于打开软件后,关闭窗口不会停止服务 例如 nginx 1.把nginx的快捷方式放到如图所示的文件夹下 C:\Users\KIA_27\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 注意KIA_27应改为你自己的用户名

Linux查看硬件型号详细信息

1.查看CPU (1)使用cat /proc/cpuinfo或lscpu (2)使用dmidecode -i processor Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息。Dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS、系统、主板、…

C++ 笛卡尔树

目录 一、性质二、构建笛卡尔树三、应用四、源码 一、性质 堆性质: 笛卡尔树是一种满足堆性质的树。每个节点包含两个值:键值(key)和优先级值(priority)。在笛卡尔树中,根节点的优先级值最大&am…