替換字串中的空格《演算法很美》

羅彬樺發表於2021-01-01

替換字串中的空格

思路: 有兩種方法,一種是直接呼叫javaApi的形式替換字串中的空格,另外一種是自己寫,思路:先遍歷字串,用count來記錄空格變換成%20後的長度,然後設定兩個指標p1,p2進行調換。

具體思路:

  1. ”Mr John Smith0000000000000000000000“
  2. 將字串轉成字元陣列"Mr John Smith0000000000000000000000".toCharArray()
  3. 遍歷iniString[]陣列,根據’ '來增加count的長度。
  4. 原本count長度為 int count = length;(13) 此時count的長度為17
  5. 設定p1 = length-1(12); p2 = count-1(16)
  6. while(p1>=0) 遍歷p1
  7. Mr John Smith | Mr John Smith0000000000000000000000
  8. 從後面開始判斷,如果是字元就往後移動,如果是空格就在後面加上%20,幹完一件事都要p1–。 記得是在16的位置
  9. Mr John Smith000h000000000000000000
  10. Mr John Smith00th000000000000000000
  11. Mr John Smith0ith000000000000000000
  12. Mr John Smithmith000000000000000000
  13. Mr John SmitSmith000000000000000000
  14. Mr John S%20Smith000000000000000000
  15. Mr John n%20Smith000000000000000000
  16. Mr Johnhn%20Smith000000000000000000
  17. Mr Johohn%20Smith000000000000000000
  18. Mr JoJohn%20Smith000000000000000000
  19. Mr%20John%20Smith000000000000000000
  20. 最後擷取0~count的長度即可
/*
 請編寫一個方法,將字串中的空格全部替換為"%20",假定該字串有足夠的空間存放新增的字元
 並且知道字串的真實長度(小於等於1000),同時保證字串由大小寫的英文字母組成。
 給定一個string iniString 為原始的串,以及串的長度 int len,返回替換後的string。
 測試樣例:
 "Mr John Smith",13
 返回:"Mr%20John%20Smith"
 "Hello World",12
 返回:"Hello%20%20World"
*
* */
public class 替換字串中的空格 {
    public static void main(String[] args){
        System.out.println(replaceSpace("Mr John Smith0000000000000000000000".toCharArray(),13));
    }
    public static String replaceSpace(String iniString, int length){
        return iniString.replaceAll("\\s","%20");
    }
    public static String replaceSpace(char[] iniString, int length) {
        int count = length;
        for (int i = 0; i < length; i++) {
            if (iniString[i]==' '){
                count+=2;
            }
        }
        int p1 = length-1;
        int p2 = count-1;
        while(p1>=0){
            if (iniString[p1]==' '){
                iniString[p2--]='0';
                iniString[p2--]='2';
                iniString[p2--]='%';
            }else {
                iniString[p2--]=iniString[p1];
            }
            p1--;
        }
        return new String(iniString,0,count);
    }
}

相關文章