java 劍指offer 第二題:請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。
阿新 • • 發佈:2018-12-08
**
public class Solution {
public String replaceSpace(StringBuffer str) {
首先程式給出的引數是StringBuffer類,那麼我首先考慮的是就呼叫StringBuffer類的相關方法完成操作。
- 方法一
配合StringBuffer 的indexOf方法和replace方法。
但是StringBuffer沒有方法來判斷str裡面是否有空格,所以先轉換為字串判斷是否有空格。
public class Solution {
public String replaceSpace(StringBuffer str ) {
String result = str.toString();
if(result.contains(" ")){
while(str.indexOf(" ") != str.lastIndexOf(" ")){
int index = str.indexOf(" ");
str.replace(index,index+1,"%20");
}
int index = str.indexOf(" ");
str.replace(index ,index+1,"%20");
result = str.toString();
return result;
}else{
return result;
}
}
}
結果為17ms,13012k.
- 方法二
後來發現StringBuffer的indexOf方法找不到時返回值為-1,那麼直接使用-1
來做判斷程式碼簡單很多。
public class Solution {
public String replaceSpace(StringBuffer str ) {
int index = str.indexOf(" ");
while(index != -1){
str.replace(index,index+1,"%20");
index = str.indexOf(" ",index);
}
String result = str.toString();
return result;
}
}
測試通過為18ms,8928k。(不知道時間為什麼會變多)
- 方法三
事後檢視網上的方法,不呼叫replace方法實現。
public class Solution {
public String replaceSpace(StringBuffer str) {
int n = str.length();//字串的長度
int ii = 0;//空格的個數ii
for(int i = 0;i < n;i++){
//檢測空格
if(str.charAt(i)==' '){
ii++;
}
}
int nn = 2 * ii + n;//根據空格的個數,得到新陣列的長度
int index = nn -1;
char[] ct = new char[nn];//新建陣列
while(n > 0){
if(str.charAt(n - 1) != ' '){
//如果不是空格
ct[index--] = str.charAt(n-1);
}
else{
//如果是空格
ct[index--] = '0';
ct[index--] = '2';
ct[index--] = '%';
}
//取下一個字元
n--;
}
return String.valueOf(ct);//將字元陣列轉為String型別後返回
}
}
測試結果18ms,8744k.