劍指offer二之替換空格

2021-09-08 22:49:59 字數 3957 閱讀 8023

一、題目:

請實現乙個函式,將乙個字串中的空格替換成「%20」。例如,當字串為i love you.則經過替換之後的字串為i%20love%20you。

二、解題方法:

方法1:採用string的repalceall方法

public

class

reword

private

static

string replacespace(stringbuffer str)

}

方法2:建立新的字串,將舊的字串一次放入新的字串,當遇到空格的時候,進行替換

public

class

reword

private

static

string replacespace(stringbuffer str)

stringbuilder stb = new

stringbuilder();

for (int i = 0; i < str.length(); i++)

else

}return

stb.tostring();

}}

方法3:先遍歷查詢所有的空格數量,然後從字串的後面往前進行遍歷替換

public

class

reword

private

static

string replacespace(stringbuffer str)

int oldindex = str.length() - 1;//

替換前下標

int newlength = str.length() + numspace * 2;//

替換之後str長度,z注意乘以2,而不是3

int newindex = newlength - 1;//

替換後下標

str.setlength(newlength);//

擴充套件長度

for (; oldindex >= 0 && oldindex < newlength; oldindex--) else

}return

str.tostring();

}}

附:stringbuffer的用法

1、stringbuffer物件的初始化

stringbuffer s = new stringbuffer();

這樣初始化出的stringbuffer物件是乙個空的物件,就是我犯的錯誤。如果需要建立帶有內容的stringbuffer物件,則可以使用:

stringbuffer s = new stringbuffer(「abc」);

這樣初始化出的stringbuffer物件的內容就是字串」abc」。需要注意的是,stringbuffer和string屬於不同的型別,也不能直接進行強制型別轉換,下面的**都是錯誤的:

stringbuffer s = 「abc」; //賦值型別不匹配

stringbuffer s = (stringbuffer)」abc」; //不存在繼承關係,無法進行強轉

stringbuffer物件和string物件之間的互轉的**如下:

string s = 「abc」;

stringbuffer sb1 = new stringbuffer(「123」);

stringbuffer sb2 = new stringbuffer(s); //string轉換為stringbuffer

string s1 = sb1.tostring(); //stringbuffer轉換為string

2、stringbuffer的常用方法

stringbuffer類中的方法主要偏重於對於字串的變化,例如追加、插入和刪除等,這個也是stringbuffer和string類的主要區別。

該方法的作用是追加內容到當前stringbuffer物件的末尾,類似於字串的連線。呼叫該方法以後,stringbuffer物件的內容也發生改變,例如:

stringbuffer sb = new stringbuffer(「abc」);

則物件sb的值將變成」abctrue」。使用該方法進行字串的連線,將比string更加節約內容,例如應用於資料庫sql語句的連線,例如:

stringbuffer sb = new stringbuffer();

string user = 「test」;

string pwd = 「123」;

這樣物件sb的值就是字串「select * from userinfo where username=test and pwd=123」。

(2)deletecharat方法

public stringbuffer deletecharat(int index)

該方法的作用是刪除指定位置的字元,然後將剩餘的內容形成新的字串。例如:

stringbuffer sb = new stringbuffer(「test」);

sb. deletecharat(1);

該**的作用刪除字串物件sb中索引值為1的字元,也就是刪除第二個字元,剩餘的內容組成乙個新的字串。所以物件sb的值變為」tst」。還存在乙個功能類似的delete方法:

public stringbuffer delete(int start,int end)

該方法的作用是刪除指定區間以內的所有字元,包含start,不包含end索引值的區間。例如:

stringbuffer sb = new stringbuffer(「teststring」);

sb. delete (1,4);

該**的作用是刪除索引值1(包括)到索引值4(不包括)之間的所有字元,剩餘的字元形成新的字串。則物件sb的值是」tstring」。

(3)insert方法

public stringbuffer insert(int offset, boolean b)

該方法的作用是在stringbuffer物件中插入內容,然後形成新的字串。例如:

stringbuffer sb = new stringbuffer(「teststring」);

sb.insert(4,false);

該示例**的作用是在物件sb的索引值4的位置插入false值,形成新的字串,則執行以後物件sb的值是」testfalsestring」。

(4)reverse方法

public stringbuffer reverse()

該方法的作用是將stringbuffer物件中的內容反轉,然後形成新的字串。例如:

stringbuffer sb = new stringbuffer(「abc」);

sb.reverse();

經過反轉以後,物件sb中的內容將變為」cba」。

(5)setcharat方法

public void setcharat(int index, char ch)

該方法的作用是修改物件中索引值為index位置的字元為新的字元ch。例如:

stringbuffer sb = new stringbuffer(「abc」);

sb.setcharat(1,』d』);

則物件sb的值將變成」adc」。

(6)trimtosize方法

public void trimtosize()

該方法的作用是將stringbuffer物件的中儲存空間縮小到和字串長度一樣的長度,減少空間的浪費。

總之,在實際使用時,string和stringbuffer各有優勢和不足,可以根據具體的使用環境,選擇對應的型別進行使用。

劍指offer《二》替換空格

劍指offer 二 替換空格 題目描述 class solution int newnumber oldnumber cout 2 if newnumber oldnumber return int newindex newnumber int oldindex oldnumber while ne...

劍指Offer之 替換空格

把字串中的空格用 20代替。統計空格個數,從後往前賦字元。include using namespace std 函式功能 把字串中的空格用 20代替 思路 統計空格個數,從後往前賦字元 注意點 要判斷字串的位元組個數是否夠替換後的字元數,如果不夠則不能替換 void replacebland ch...

劍指offer之空格替換

請實現乙個函式,把字串 s 中的每個空格替換成 20 示例 看到這道題,我們首先應該想到的是原來的空格被替換成 2 0 著三個字元,因此字串會變長,如果在原來的字串上進行替換,那麼就有可能覆蓋修改在該字串後面的記憶體。如果是建立新的字串並在上面進行替換,那麼我們可以自己分配足夠的記憶體。考慮執行替換...