資料結構:java建立串並實現增刪改查功能
前言:java實現串的過程中遇到的問題
1、當自己建立seqstring物件然後輸出s時,會出現如下結果
public class seqstring { private char[]strvalue; private int curlen; public seqstring(String str){ strvalue=str.toCharArray(); curlen=str.length(); } public static void main(String[] args){ seqstring s=new seqstring("hellow"); System.out.println(s); }
輸出結果:[email protected]
因為直接輸出一個類的物件的時候,會呼叫這個類的toString()方法,這個方法有些類是覆蓋了的,比如String,Integer。我自己寫的類seqstring沒有覆蓋這個方法的話就是繼承Object類的這個方法,Object中toString()方法的實現是這樣的
getClass().getName() + "@" + Integer.toHexString(hashCode())
後面跟的是這個類的雜湊碼,如果希望這個類打印出來輸出我們希望的格式,兩種解決方法
一、覆蓋這個toString方法。
上面程式碼覆蓋如下,就會輸出hellow
public String toString(){
return new String(strvalue);
}
二、自己寫一個print方法
下面是具體實現程式碼以及測試用例public class seqstring { private char[]strvalue; private int curlen; public seqstring(String str){ strvalue=str.toCharArray(); curlen=str.length(); } public void myprint(){ for(int i=0;i<curlen;i++) System.out.print(strvalue[i]); System.out.println(); } public static void main(String[] args){ seqstring s=new seqstring("hellow"); s.myprint(); } }
串的抽象資料型別用java介面描述如下
package practice2;
public interface IString { //串的抽象資料型別使用java介面描述
public void clear();
public boolean isEmpty();
public int length();
public char charAt(int index); //取字元操作
public IString substring(int begin,int end); //擷取字元操作
public IString insert(int offset,IString str); //插入操作
public IString delete(int begin,int end); //刪除操作
public IString concat(IString str); //連線操作
public int compareTo(IString str);
public void myprint(); //輸出操作
}
以順序儲存結構實現串的類的定義如下
package practice2;
public class seqstring implements IString {
private char[] strvalue; //字元陣列存放串值
private int curlen; //當前串的長度
public seqstring(){ //構造方法1,構造空串
strvalue=new char[0];
curlen=0;
}
public seqstring(String str){ //構造方法2,以字串常量構造串物件
strvalue=str.toCharArray();
curlen=strvalue.length;
}
public seqstring(char[] value){ //構造方法3,以字元陣列構造串物件
strvalue=new char[value.length];
for(int i=0;i<value.length;i++){
strvalue[i]=value[i];
}
curlen=value.length;
}
public void clear(){ //將一個已經存在的字串置成空串
curlen=0;
}
public boolean isEmpty(){ //判斷字串是否為空
return curlen==0;
}
public int length(){ //返回字串長度
return curlen;
}
public char charAt(int index){ //返回字串中序號為index的字元
if(index<0||index>=curlen){
throw new StringIndexOutOfBoundsException(index);
}
return strvalue[index];
}
public void allocate(int newcapacity){ //擴充字串儲存空間容量,引數指定容量
char[]temp=strvalue;
strvalue=new char[newcapacity];
for(int i=0;i<temp.length;i++)
strvalue[i]=temp[i];
}
public IString substring(int begin,int end){ //擷取從begin到end-1的子串並返回
if(begin<0)
throw new StringIndexOutOfBoundsException("起始位置不能小於0");
if(end>curlen)
throw new StringIndexOutOfBoundsException("結束位置不能大於串的當前長度");
if(begin>end)
throw new StringIndexOutOfBoundsException("開始位置不能大於結束位置");
if(begin==0&&end==curlen)
return this;
else{
char[]buffer=new char[end-begin];
for(int i=0;i<buffer.length;i++)
buffer[i]=this.strvalue[i+begin];
return new seqstring(buffer);
}
}
public IString insert(int offset,IString str){ //在第offset字元之前插入str
if(offset<0||offset>this.curlen)
throw new StringIndexOutOfBoundsException("插入位置不合法");
int len=str.length();
int newcount=len+curlen;
if(newcount>strvalue.length){
allocate(newcount);
}
for(int i=curlen-1;i>=offset;i--){
strvalue[len+i]=strvalue[i];
}
for(int i=0;i<len;i++)
strvalue[i+offset]=str.charAt(i);
curlen=newcount;
return this;
}
public seqstring delete(int begin,int end){ //刪除從begin從end-1為止的字串
for(int i=0;i<curlen-end;i++)
strvalue[begin+i]=strvalue[end+i];
curlen=curlen-(end-begin);
return this;
}
public int compareTo(IString str){ //將當前串與str比較
int len1=curlen;
int len2=str.length();
int n=Math.min(len1, len2);
char[]s1=strvalue;
char[] s2=new char[str.length()];
for(int i=0;i<str.length();i++)
s2[i]=str.charAt(i);
int k=0;
while(k<n){
char ch1=s1[k];
char ch2=s2[k];
if(ch1!=ch2){
return ch1-ch2;
}
k++;
}
return len1-len2;
}
public IString concat(IString str){
return insert(curlen,str);
}
public void myprint(){
for(int i=0;i<curlen;i++){
System.out.print(strvalue[i]);
}
System.out.println();
}
public static void main(String[] args){
seqstring s1=new seqstring(); //構造方法1,構造空串
seqstring s2=new seqstring("hello"); //構造方法二,以字串常量構造串物件
char[] chararray={'w','o','r','l','d'};
seqstring s3=new seqstring(chararray); //構造方法3,以字元陣列構造串物件
System.out.print("串s1=");
s1.myprint();
System.out.print("串s2=");
s2.myprint();
System.out.print("串s3=");
s3.myprint();
System.out.println("串s1在第0個字元前插入s2後s1=");
s1.insert(0, s2).myprint();
System.out.println("串s1刪除第1到第2個字元後:");
s1.delete(1, 3).myprint();
System.out.println("擷取s3的第1到第2個字元");
s3.substring(1, 3).myprint();
}
}
測試結果:
相關推薦
資料結構:java建立串並實現增刪改查功能
前言:java實現串的過程中遇到的問題 1、當自己建立seqstring物件然後輸出s時,會出現如下結果 public class seqstring { private char[]strvalue; private int curlen; pu
Java操作Oracle並實現增刪改查
在這裡我選擇的是maven專案,但是找了良久沒有發現依賴,或者就是不能用,於是就去Oracle官網下載了ojdbc的jar包. 連線程式碼如下: package oracle; import java.sql.Connection; import java.sql.Dr
複習:JDBC工具類並實現增刪改查
JDBC工具類 package bull01.JDBCbasis; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExceptio
java建立陣列,實現增刪改查
1:建立陣列 int[] arr = new int[10];//建立陣列,初始化大小為10 2:訪問資料資料項 arr[0]=1;//這個是設定她的值 System.out.println(arr[0]);//這個是獲取她的值,通過列印的方
java建立順序表及增刪改查功能實現
順序表類的增刪改查功能實現java語言描述package ch01; public class Sqlist { private Object listelem[]; //線性表儲存空間 private int curlen;
建立SQLite資料庫並實現增刪改查
(1)、除了可以使用檔案或SharedPreferences儲存資料,還可以選擇使用SQLite資料庫儲存資料。 (2)、在Android平臺上,集成了一個嵌入式關係型資料庫—SQLite
sql server連線oracle並實現增刪改查
需要一個軟體ODAC112040Xcopy_64bit 我連線的oracle是11g r2 sqlserver 是 2016 軟體下載 https://pan.baidu.com/s/1OpYmpReEJcPg4wNESWy61Q 伺服器先安裝.net 2.0和3.5 安裝好以後 解壓ODA
java連線mongoDB 並進行增刪改查操作
1、安裝 MongoDB JDBC驅動程式 在java中使用mongoDB之前,首先需要擁有java連線mongoDB的第三方驅動包(jar包) 1)maven專案可通過在pom.xml中新增依賴 <dependencies> <depende
基於MongoDB資料庫的Java程式實現增刪改查功能
今天我來說一下使用Java程式去實現MongoDB資料庫的增刪改查功能。 首先需要匯入連線資料庫的jar包,需要的話這是連結:http://pan.baidu.com/s/1eSDytAM,把jar包
Java中使用mongodb實現增刪改查
Java 安裝 要想在 Java 程式中使用 MongoDB,需要先確定是否安裝了 MongoDB JDBC 驅動,並且要在機器上安裝了 Java。檢視 Java 教程來確保在機器上安裝好 Java。下面來介紹如何安裝 MongoDB JDBC 驅動。 從路徑 Download mongo.jar 處下載
MyEclipse搭建SSH並實現增刪改查
一、 新建一個web專案命名為ssh完成之後目錄結構二、 為工程加上Struts2的支援然後是選擇struts的包,根據需要將struts的包新增進來,一般需要新增的包如下Struts Core librariesStruts必須包
springmvc配置myBatis,並實現增刪改查、分頁功能
springmvc配置myBatis myBatis是一個數據庫訪問的外掛,通過jdbc實現。 實現思路: 1.maven引入myBatis <!-- mybatis核心包 --> <dependenc
unity網路實戰開發(叢林戰爭)-前期知識準備(011-c#連線資料庫並實現增刪改查以及sql注入問題)
使用工具:VS2015,Mysql使用語言:c#作者:Gemini_xujian參考:siki老師-《叢林戰爭》視訊教程繼上一篇文章內容,這節課講解一下資料庫的前期連線準備以及通過c# 實現資料庫的增刪改擦操作。首先你需要自行安裝Mysql以及它的workbench元件。然後
利用JDBC連線MySQL資料庫並實現增刪改查的程式碼示例
一、實現增刪改: 比較簡單: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;
SSM框架搭建(Spring+SpringMVC+MyBatis)與easyui整合並實現增刪改查實現
一、用myEclipse初始化Web專案 新建一個web project: 二、建立包 controller //控制類 service//服務介面 service.impl//服務實現類 dao //data access object
fullcalendar日曆外掛的使用並實現增刪改查
1、剛進去預設顯示當前月份,查出資料庫的資料並展示,今天是2018年1月19號,所以我給上過的課次顏色變為灰色,而沒上過的課次變為橙色 2、點選特定的日期,新增課次: 點選未上過的課次進行編輯或刪除: 以及課次的拖動,如將1月22號的“08:00-09:00 高數一班”拖動到1月29號:
mysql操作數據庫進行封裝實現增刪改查功能
mysqlSqlTool.class.php <?php class SqlTool{ private $conn; private $host = "localhost"; private $user = "root"; pr
Mock.js簡易教程,脫離後端獨立開發,實現增刪改查功能
定義 數據 false 則表達式 type break 整數 增 刪 改 查 大於 在我們的生產實際中,後端的接口往往是較晚才會出來,並且還要寫接口文檔,於是我們的前端的許多開發都要等到接口給我們才能進行,這樣對於我們前端來說顯得十分的被動,於是有沒有可以制造假數據來模擬後
使用Bootstrap模態框實現增刪改查功能
模態框(Modal)是覆蓋在父窗體上的子窗體。通常,目的是顯示來自一個單獨的源的內容,可以在不離開父窗體的情況下有一些互動。子窗體可提供資訊、互動等。 本文實現的是使用模態框實現簡單的增刪改查的功能。主要思想是 使用一個模態框,使用jquery呼叫一個控制器方法返回一個分部視圖表單,載入到這個模態框中。然後
基於SpringBoot開發一個Restful服務,實現增刪改查功能
ner github上 epo column dex typealias odin 開發人員 java 在去年的時候,在各種渠道中略微的了解了SpringBoot,在開發web項目的時候是如何的方便、快捷。但是當時並沒有認真的去學習下,畢竟感覺自己在Struts和Spr