一、題目:
請實現乙個函式,將乙個字串中的空格替換成「%20」。例如,當字串為i love you.則經過替換之後的字串為i%20love%20you。
二、解題方法:
方法1:採用string的repalceall方法
publicclass
reword
private
static
string replacespace(stringbuffer str)
}
方法2:建立新的字串,將舊的字串一次放入新的字串,當遇到空格的時候,進行替換
publicclass
reword
private
static
string replacespace(stringbuffer str)
stringbuilder stb = new
stringbuilder();
for (int i = 0; i < str.length(); i++)
else
}return
stb.tostring();
}}
方法3:先遍歷查詢所有的空格數量,然後從字串的後面往前進行遍歷替換
publicclass
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 著三個字元,因此字串會變長,如果在原來的字串上進行替換,那麼就有可能覆蓋修改在該字串後面的記憶體。如果是建立新的字串並在上面進行替換,那麼我們可以自己分配足夠的記憶體。考慮執行替換...