1. 程式人生 > >資料結構:java建立串並實現增刪改查功能

資料結構: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