字符串---Java实现

news/2026/1/21 17:28:05/文章来源:https://www.cnblogs.com/tww103/p/19513172
package Data_Structure;import java.util.NoSuchElementException;public final class MyString {private final char[] data;public MyString(){data = new char[0];}//根据传入字符串构造串public MyString(String str){data = new char[str.length()];for(int i=0;i<str.length();i++){data[i]= str.charAt(i);}}//根据传入MyString构造字符串,等同于构造赋值方法public MyString(MyString str){if(str==null)throw new IllegalArgumentException("参数不能为null");data = new char[str.length()];for(int i=0;i<str.length();i++)data[i] = str.charAt(i);}public MyString(int  length){data = new char[length];}//该操作将覆盖目标原来的内存public  static MyString strCopy(MyString res){if(res==null)throw new IllegalArgumentException("参数不能为null");return new MyString(res);}//返回字符串长度public int length(){return this.data.length;}//返回索引所在字符public char charAt(int index){return this.data[index];}//空返回真,反之返回假public boolean empty(){if(this.length()==0)return true;else{return false;}}// 比较字符串大小public int compareTo(MyString str) {// 1. 异常选型建议:参数为空通常抛出 NullPointerException 或 IllegalArgumentExceptionif (str == null) {throw new NullPointerException("Comparison target is null");}int len1 = this.length();int len2 = str.length();// 2. 核心:确定比较的边界限制int lim = Math.min(len1, len2);int i = 0;while (i < lim) {char c1 = this.charAt(i);char c2 = str.charAt(i);if (c1 != c2) {//                // 3. 发现不相等的字符,直接返回差值return c1 - c2;}i++;}// 4. 重要:如果运行到这里,说明在 min(len1, len2) 范围内字符全部相等// 此时根据长度判断,例如 "abc" < "abcd",返回 -1return len1 - len2;}//静态工厂方法public static MyString valueOf(String str){if(str==null)throw new IllegalArgumentException("参数为空");return new MyString(str);}//将串2连接到串1后面public MyString concat(MyString string){int newLength = this.length() + string.length();MyString newStr = new MyString(newLength);//分配足额空间//先赋值原先的for(int i=0;i<this.length();i++){newStr.data[i] = this.data[i];}//再赋值附加的for(int i=newLength-string.length(),j=0;i<newLength;i++,j++){newStr.data[i] = string.charAt(j);}return newStr;}//返回从pos起len长度的串public MyString substring(int pos,int len){MyString sub = new MyString(len);if(this.data==null){throw new NoSuchElementException();}// 参数校验if (pos < 0 || len < 0) {throw new IllegalArgumentException("位置和长度不能为负数");}if (pos >= this.length()) {throw new IllegalArgumentException("起始位置超出字符串长度");}if (pos + len > this.length()) {throw new IllegalArgumentException("截取长度超出字符串范围");}for(int i=pos,j=0;i<pos+len;i++,j++){sub.data[j]=this.data[i];}return sub;}//从主串第pos位置开始,查找与sub相同的子串,返回位置,查找失败返回0 ,朴素算法public int index(MyString sub,int pos){if(pos<0 || pos>=length()){throw new IllegalArgumentException("pos参数越界");}if(this.data==null ||sub==null)throw new NoSuchElementException("主串或待查子串为空");int index=pos; //从pos起搜索主串int j=0; //遍历子串while(index<this.length() && j<sub.length()){//如果相等,继续匹配下一个if(this.data[index]==sub.data[j]){j++;index++;}else{//如果不匹配,让主串从下一个重新开始搜索index = index-j+1;j=0;}}//结束后,如果j的长度等于子串的长度, 则说明匹配成功if(j==sub.length())return index-j+1;elsereturn  0;}//插入串public MyString insert(MyString str,int pos){if(str==null || pos<0 ||pos>this.length())throw new IndexOutOfBoundsException("串str为空或非法下标");int newLength = this.length()+str.length();MyString newStr = new MyString(newLength); //分配新长度//先复制原先的字符串for(int i=0;i<this.length();i++){newStr.data[i] = this.data[i];}//再通过新字符串依次后移str.length()个字符for(int i=this.length()-1;i>=pos;i--){//依次后移str.length位newStr.data[i+str.length()] = this.data[i];}//插入参数中的字符串for(int i=0;i<str.length();i++){newStr.data[i+pos]=str.data[i];}return newStr;}public MyString delete(int pos,int len){if(this.data==null)throw new NoSuchElementException();if(pos<0||pos+len>this.length())throw new IllegalArgumentException("非法参数");//由于字符数组构造之后,其length不可改变//所以要提前构造一个新的MyString deStr = new MyString(this.length()-len);//复制0到pos前的字符int i=0;for(i=0;i<pos;i++){deStr.data[i] =this.data[i];}//跳过pos到len的字符,为pos+len 到this.length;for(int j=pos+len;j<this.length();j++){deStr.data[i++] = this.data[j];}return deStr;}//类相等判断@Overridepublic boolean equals(Object str){//向下转换//引用简称if(this==str)return true;//空引用简称if(str ==null)return false;// 比较是不是同类if(getClass()!=str.getClass())return false;MyString other =(MyString) str;//比较字符长度if(this.length()!=other.length())return false;//依次比较每个字符for(int i=0;i< other.length();i++){if(this.data[i]!=other.data[i])return false;}return true;}public String toString(){return new String(this.data);}public static void main(String[] args){MyString str =new MyString("String");str = MyString.valueOf("Hello");MyString str2=new MyString(" World");MyString str3 = str.concat(str2);System.out.println(str3);MyString test = new MyString("AI");str= str.insert(test,2);System.out.println(str);str = str3.delete(2,3);System.out.println(str);}
}

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

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

相关文章

VMware Tools 13.0.10.0 发布 - 客户机操作系统无缝交互必备组件

VMware Tools 13.0.10.0 发布 - 客户机操作系统无缝交互必备组件VMware Tools 13.0.10.0 发布 - 客户机操作系统无缝交互必备组件 VMware 虚拟机必备组件 (驱动和交互式服务) 请访问原文链接:https://sysin.org/blog/…

2026年黄花梨家具工厂公司权威推荐:红木床厂家、红木茶台茶桌、南通大红酸枝沙发、南通小叶紫檀家具、南通红木家具选择指南

2026优秀黄花梨家具工厂推荐指南据《2026-2030中国红木家具行业发展白皮书》数据显示,2026年国内红木家具市场规模突破1200亿元,其中以黄花梨为代表的名贵红木家具收藏需求年增长率达18.7%。伴随市场扩容,材质真伪难…

SonarQube 平替?sourceFare:轻量级开源代码扫描新选择

研发过程中&#xff0c;为了持续检测和改进代码质量&#xff0c;会使用一些代码扫描工具。例如SonarQube&#xff0c;SonarQube是一款代码质量管理工具&#xff0c;能通过静态分析检测代码缺陷、漏洞、重复和异味&#xff0c;支持Java、Python、C等编程语言。但是部分语言收费&…

《机器学习》第五章-集成学习(Bagging/Boosting)

前言 大家好&#xff01;今天给大家带来机器学习中非常重要的一个章节 —— 集成学习。集成学习可以说是工业界最常用的机器学习算法之一&#xff0c;像随机森林、GBDT、XGBoost 这些经典模型都属于集成学习的范畴。本文会从基础概念到实战应用&#xff0c;一步步带你吃透集成学…

MATH Day 05 Applications Practice

可持久化线段树 (Persistent Segment Tree) 1. 核心思想:共享结构 (Shared Structure)基本原理:每次修改操作不复制整个结构,而仅创建 \(O(\log n)\) 个新节点。 关键技术:动态开点。每个节点显式存储左右儿子的索…

2026年第一季度,江苏地区诚信可靠的徐州干式变压器公司如何选?

转载自:https://www.remenpp.com/rankinglis/289904.html 面对“双碳”目标深入与制造业智能化升级的双重驱动,企业如何从江苏徐州地区众多变压器供应商中,筛选出技术过硬、交付可靠、服务诚信的长期合作伙伴?这不仅…

VMware vSAN 9.0.2.0 发布 - 数据中心存储虚拟化

VMware vSAN 9.0.2.0 发布 - 数据中心存储虚拟化VMware vSAN 9.0.2.0 发布 - 数据中心存储虚拟化 vSAN 9 with Express Storage Architecture 请访问原文链接:https://sysin.org/blog/vmware-vsan-9/ 查看最新版。原创…

Python Falcon框架:专为高性能API设计的精简利器

目录 一、性能优先的极简主义 二、多维度优化策略 三、核心特性&#xff1a;RESTful开发的精准工具集 四、典型应用场景 五、技术选型建议 在Python生态中&#xff0c;Web框架的选择直接影响着API服务的性能与开发效率。Falcon作为一款专为RESTful API构建的轻量级框架&am…

2026年国内有实力的不锈钢管生产加工推荐,不锈钢不等边角钢/不锈钢黑棒/不锈钢非标盘管,不锈钢管批发零售哪家好

随着国内制造业向高端化、精细化转型,不锈钢管作为工业领域的关键基础材料,其品质与供应能力直接影响产业链效率。当前,市场对不锈钢管的需求呈现“多材质、多场景、高定制”特征,从建筑装饰到新能源装备,从食品医…

太原哪有好的心理医生

太原科大心理咨询中心创新打造了全新的“临床心理门诊+心理咨询中心”医学心理全体系诊疗模式,构建了集医学诊断、心理评估、心理咨询、心理康复等一体化、一站式的综合性心理健康服务。 致力于为山西省区域家庭、企业…

2026年内蒙古包头钢结构生产厂家Top5权威解析与选型指南

转载自:https://www.aifawen.com/rankinglis/290108.html 文章摘要 本文深入剖析了内蒙古地区,特别是包头市钢结构产业在2026年的竞争格局与发展趋势。面对建筑工业化与绿色发展的浪潮,选择一家技术可靠、服务全面的…

【个人总结】目前学会的技术栈

后端 Java: SpringBoot, SSM等基础企业级开发技术栈 JavaScipt: Node.js+express快速构建后端服务 Rust:学习中 前端 Html+Css+JavaScript三件套 Vue框架 Uniapp框架 爬虫 Python爬取简单的数据 数据分析 Python通过简…

2026年激光切割设备推荐:西安中科微精光子领衔超快激光制造新纪元

一、行业背景与榜单意义 在制造业转型升级与“双碳”目标驱动下,激光加工设备已成为航空航天、新能源、半导体等战略领域的关键支撑。本榜单基于2026年最新市场调研、技术专利分析、用户口碑及EEAT原则筛选,聚焦飞秒…

基于51单片机自动吸尘粉笔擦黑板压力检测风扇除尘设计DIY套件127(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51单片机自动吸尘粉笔擦黑板压力检测风扇除尘设计DIY套件127(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 51单片机黑板自动吸尘粉笔擦压力检测风扇除尘127产品功能描述&#xff1a; 本系统由STC89C52单片机、拨动开关、…

PostgreSQL 如何使用执行计划:从入门到实战调优

在数据库性能优化领域&#xff0c;执行计划&#xff08;Execution Plan&#xff09;是开发者与数据库优化器对话的"翻译器"。PostgreSQL的执行计划不仅揭示了SQL语句的执行路径&#xff0c;更通过成本估算、实际耗时等关键指标&#xff0c;为性能瓶颈定位提供了科学依…

盒马鲜生礼品卡回收变现 京顺回收高效解忧

在消费场景日益多元化的当下,盒马鲜生礼品卡作为热门福利,常因消费习惯改变或门店调整而被闲置。2025年行业数据显示,超30%的盒马礼品卡因未及时使用而过期,卡内余额清零,造成资源浪费。安全高效地将闲置礼品卡变…

RobotFramework定位不到元素的一个问题记录

背景: 生产环境使用的版本较低,为Robot Framework 3.1.2 (Python 2.7.15 on linux) 代码使用了Page Should Contain关键字来判断界面包含文本,但是判断后,发现后面自定义的关键字“去开通接口”里面报错, Element…

基于51单片机智能洗手器干手器红外人体感应风扇烘干设计套件149(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于51单片机智能洗手器干手器红外人体感应风扇烘干设计套件149(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码51单片机智能红外洗手器干手器风扇烘干系统149 产品功能描述&#xff1a; 本系统由STC89C52单片机、继电器控制、…

皖美绿电筑展 2026:展台设计搭建的科创新范式

开篇:合肥展台搭建的绿电基因与科创内核 2026 年的合肥会展业,正踏着 “十五五” 规划的步伐加速崛起。滨湖国际会展中心二期建成后形成的 80 万平方米会展集群,144 米超大无柱跨度的全国纪录,世界制造业大会全绿电…

2026年深圳智能学习机公司市场解析:小学生学习机 /学生学习机 /电脑学习机 /平板学习机 /拼音学习机/学生平板电脑学习机竞争力盘点

近年来,随着人工智能技术与大模型在消费电子领域加速落地,深圳作为中国乃至全球消费电子产业的核心策源地,再次引领了智能学习机这一细分赛道的创新与变革。产业数据显示,超过60%的主流教育智能硬件品牌选择在深圳…