顺序串的实现

顺序串

  • 接口
  • 查找增加...
  • 测试

接口

package com.lovely.string;/*** * @author echo lovely* 2020年6月9日下午6:44:31** 串的接口描述*/
public interface IString {public void clear();public boolean isEmpty(); public int length(); public char charAt(int i) throws Exception; // 读取并返回串中的第i个数据元素public IString subString(int begin, int end); // 返回位序号从begin到end-1的子串public void insert(int i, IString str) throws Exception; // 在第i个字符之前插入字串strpublic void delete(int begin, int end); // 删除位序号从begin到end-1的子串public IString concat(IString str); // 将str连接到字符串的后面public int compareTo(IString str); // 比较str和当前字符串的大小public int indexOf(IString str, int fromIndex) throws Exception; // 从位序号为begin的字符开始搜索与str相等的字串
}

查找增加…

package com.lovely.string;/*** @author echo lovely* 2020年6月9日下午6:55:32* 顺序串的实现*/
public class SeqString implements IString {private char[] strValue; // 字符数组存放传值private int curLen; // 当前串的长度public SeqString() {strValue = new char[0];curLen = 0;}// 以字符串常量构造串 本质是字符串 -> 字符数组public SeqString(String str) {strValue = str.toCharArray();curLen = strValue.length;}// 以字符数组构造串public SeqString(char[] ch) {strValue = new char[ch.length];for (int i = 0; i < ch.length; i++) {strValue[i] = ch[i];}curLen = ch.length;}public void clear() {strValue = new char[0];curLen = 0;}public boolean isEmpty() {return curLen == 0;}public int length() {return curLen;}public char charAt(int i) throws Exception {// 返回i的位置if (i < 0 || i >= curLen) throw new StringIndexOutOfBoundsException(i);return strValue[i];}// 将串的长度扩充为newCapacitypublic void allocate(int newCapacity) {if (newCapacity <= curLen) {System.err.print("扩充长度不能比当前长度小!");return;}char[] tmp = strValue;strValue = new char[newCapacity];// 剩下长度newCapacity - tmp.lengthfor (int i = 0; i < tmp.length; i++) {strValue[i] = tmp[i];}}public IString subString(int begin, int end) {// 字串截取if (begin < 0 || begin > end || end > curLen) throw new StringIndexOutOfBoundsException("参数不合法");char[] tmp = new char[end - begin];for (int i = begin; i < end; i ++) {tmp[i - begin] = strValue[i]; // 复制子串}return new SeqString(tmp);// 利用字符数组构造得到新的串}public void insert(int i, IString str) throws Exception {if (i < 0 || i > curLen)throw new StringIndexOutOfBoundsException("插入位置非法");int len = str.length();// 扩充字符数组长度int newCapacity = len + curLen;allocate(newCapacity);for (int j = curLen - 1; j >= i; j --) {// 把插入位置之后的数据 往后移strValue[j + len] = strValue[j];}for (int j = i; j < i + len; j ++) strValue[j] = str.charAt(j - i); // 插入curLen = newCapacity;}@Overridepublic void delete(int begin, int end) {if (begin < 0 || end > curLen || begin >= end) {throw new StringIndexOutOfBoundsException("参数非法");}/*don't konw...*/}@Overridepublic IString concat(IString str) {// str插入字符串的尾部try {insert(curLen, str);} catch (Exception e) {e.printStackTrace();}return new SeqString(strValue);}public int compareTo(IString str) {if (curLen > str.length())return 1;int n = Math.min(curLen, str.length());for (int i = 0; i < n; i ++) {try {if (strValue[i] > str.charAt(i)) return 1;if (strValue[i] < str.charAt(i))return -1;} catch (Exception e) {e.printStackTrace();}}return 0;}public int indexOf(IString str, int fromIndex) throws Exception {if (str.length() <= curLen && str != null && curLen > 0) {int i = fromIndex;int len = str.length();while (i <= curLen - len) { // 从主串的第i个元素开始比较for (int j = 0; j < len; j++) { // 比较模式串的元素if (str.charAt(j) != strValue[j + i]) {i++;break; // 跳出当前循环} else if (j == len - 1) { // len个字符全部匹配成功return i;}}}}return -1;}public void display() {for (int i = 0; i < length(); i ++) System.out.print(strValue[i] + "");System.out.println();} }

测试

package com.lovely.string;/*** * @author echo lovely* 2020年6月10日下午3:37:30*	* 串的测试demo*/public class TestSeqString {public static void main(String[] args) {	SeqString ss = new SeqString();try {ss.insert(0, new SeqString("abc"));char[] ch = {'d', 'e', 'f'}; // 插入串1下标ss.insert(1, new SeqString(ch));// 插入串的尾部ss.insert(ss.length(), new SeqString("ghi"));} catch (Exception e) {e.printStackTrace();}// 连接ss.concat(new SeqString("连接到串的尾部"));ss.display();// 比较int i = ss.compareTo(new SeqString("ghi"));System.out.println(i > 0 ? "前面的大" : "后面的大");// 截取IString sub = ss.subString(0, 3);System.out.println("前三个串: ");((SeqString)sub).display();try {// 下标System.out.println("def的下标 " + ss.indexOf(new SeqString("def"), 0));// 字符System.out.println("最后一个字符串 " + ss.charAt(ss.length() - 1));} catch (Exception e) {e.printStackTrace();}}}
adefbcghi连接到串的尾部
前面的大
前三个串: 
ade
def的下标 1
最后一个字符串 部

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

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

相关文章

WPF多线程UI更新——两种方法

WPF多线程UI更新——两种方法 前言 在WPF中&#xff0c;在使用多线程在后台进行计算限制的异步操作的时候&#xff0c;如果在后台线程中对UI进行了修改&#xff0c;则会出现一个错误&#xff1a;&#xff08;调用线程无法访问此对象&#xff0c;因为另一个线程拥有该对象。&…

jdbc万能dao

jdbc万能dao一&#xff0c;为何封装万能dao二&#xff0c;代码实现一&#xff0c;为何封装万能dao 不用框架&#xff0c;纯jdbc连接数据库&#xff0c;会用到dao包&#xff0c;如果每个表都要写增删改查&#xff0c;一个dao至少四个方法&#xff0c;dao会有大量代码重复&#…

5月27日

其实前天我想说我有点理解我爸了 当年到福建的时候跟现在差不多吧 气候 方言 吃的 住的 跟自己原来习惯的完全是不同 恐怕人人都会问这到底是为了什么 能为了什么呢&#xff1f; 路走到这儿了 有的是自己选的 有的不是 但已经走到这里了 当时晚上到福建家里的 第二天醒来看 屋子…

二叉树的递归遍历

二叉树遍历一&#xff0c;什么是二叉树二&#xff0c;递归实现2.1 结点类描述2.2 三种递归2.2 测试一&#xff0c;什么是二叉树 在计算机科学中&#xff0c;二叉树是每个结点最多有两个子树的树结构。通常子树被称作"左子树"&#xff08;left subtree&#xff09;和&…

概率论的公理结构

样本点 一个随机事件出现的可能的结果叫做样本点。 类比平面几何&#xff0c;线、面、体也是由点组成的集合&#xff0c;研究的是点线面关系及性质&#xff0c;同样样本点也是组成事件&#xff08;集合&#xff09;的材料&#xff0c;是集合的基本元素&#xff0c;把这些样本…

python词云的简单使用

词云的生成所需库代码实现wordclod参数说明具体实现效果展示所需库 wordcloud, jieba, imageiowordcloud 词云库&#xff0c;用来统计文本文档里面出现的高频词汇&#xff0c;或者句子&#xff0c;以图片可视化的方式显示出来jieba库&#xff0c;分割中文的库&#xff0c;把较…

(一)Neo4j在Centos7虚拟机上的安装

1、什么是图数据库&#xff1f; 图数据库是基于数学里图论的思想和算法而实现的高效处理复杂关系网络的新型数据库系统。图形数据库善于高效处理大量的、复杂的、互连的、多变的数据。其计算效率远远高于传统的关系型数据库。图形数据库在社交网络、实时推荐、征信系统、人工智…

代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用

代码如下&#xff1a; 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConfigurationLibrary {public class ConfigElement{public int Id { get; set; }public string Value { get; set…

(二)Cypher语言常用方法举例

1、概述 “Cypher”是一个描述性的类Sql的图操作语言。相当于关系数据库的Sql&#xff0c;可见其重要性&#xff01;其语法针对图的特点而设计&#xff0c;非常方便和灵活。没有Join&#xff0c;是一大特点&#xff01;学好Cypher是学好Neo4j的关键&#xff0c;也是核心所在&a…

Java高新技术 枚举

&#xfeff;&#xfeff;Java高新技术 枚举 知识概要&#xff1a; (1)为什么要有枚举 (2)枚举的示例 (3)枚举的应用 (4)枚举的高级应用 (1)为什么需要枚举 问题&#xff1a;要定义星期几或性别的变量&#xff0c;该怎么定义&#xff1f; 假设用1-7分别表示星期一到星期日&am…

github 人像卡通化探索项目

把项目下载到本地 下载地址 https://github.com/minivision-ai/photo2cartoon安装依赖库 python 3.7 # 3.x版本都可 pytorch 1.4 tensorflow-gpu 1.14 # tesorflow 得是1.0版本&#xff0c;2.0版本语法部分改变&#xff0c;不然项目运行会出错 face-alignment dlibpytorch …

浅谈城市规划在移动GIS方面的应用发展

1、概述 城市建设进程加快&#xff0c;城市规划管理工作日趋繁重&#xff0c;各种来源的数据产生各种层出不穷的问题&#xff0c;严重影响城市规划时的准确性&#xff0c;为此全面合理的掌握好各方面的城市规划资料才能做出更加科学的决策。移动端的兴起为规划动态方面提供了极…

(四)Neo4j删除数据需要注意的问题

1、先删关系&#xff0c;再删节点 # 删除所有记录 MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r 2、彻底删除节点标签名&#xff0c;需要删除前期对该标签名建立的索引 # 查看全部索引 :schema# 删除索引 drop index on :Person(id)# 当索引删除不掉时&#xff0c;可能是…

jsp阶段总结

目录web开发jsp是运行在服务器端还是客户端? 服务端 js是运行在服务器端还是客户端? 客户端 jsp的本质是什么? jsp原理 jsp的本质就是servlet jsp在服务器中,当浏览器请求该jsp时,jsp文件在服务器中会经历什么过程? 转译:将jsp文件转译成java文件 编译:将转译后的java文…

CVE-2013-3897漏洞成因与利用分析

CVE-2013-3897漏洞成因与利用分析 1. 简介 此漏洞是UAF&#xff08;Use After Free&#xff09;类漏洞&#xff0c;即引用了已经释放的内存。攻击者可以利用此类漏洞实现远程代码执行。UAF漏洞的根源源于对对象引用计数的处理不当&#xff0c;比如在编写程序时忘记AddRef或者多…

(三)Neo4j自带northwind案例--Cypher语言应用

0、概述 通过该案例&#xff0c;应用Cypher查询语言&#xff0c;感受Neo4j套路。官方的用此案例的用意&#xff1a; The Northwind Graph demonstrates how to migrate&#xff08;迁移&#xff09; from a relational database to Neo4j&#xff08;把一个负责的多表关系数据…

servlet 源码分析

servlet源码分析1. servlet接口1.1 看servlet源码1.2 直接用类实现servlet接口&#xff0c;来写servlet类2. servlet子类GenericServlet2.1 servlet子类实现GenericServlet抽象类2.2 继承GenericServelt抽象类3. httpServelt类分析4. 这么多搬来的代码&#xff0c;最后总结1. s…

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;给用户和开发者最佳的.Net框架部署方案。该框架以SOA范式作为指导思想&#xff0c;作为异质系统整合与互操…

(五)官方Neo4j 3.3.9 Java API例子

0、概述 本文以Neo4j 3.3.9为基础&#xff0c;采用https://neo4j.com/docs/api/java-driver/current/给出的官方例子。下面大概记录下工程建立的过程&#xff0c;因为版本差异代码和官方给出的稍有差别。 1、使用eclipse&#xff0c;用自己安装的mvn新建一个mvn工程&#xff…