請實現一個函數,將一個字符串中的每一個空格替換成「%20」。例如,當字符串爲We Are Happy.則通過替換以後的字符串爲We%20Are%20Happy。java
解題思路app
在字符串尾部填充任意字符,使得字符串的長度等於替換以後的長度。函數
由於一個空格要替換成三個字符(%20),所以當遍歷到一個空格時,須要在尾部填充兩個任意字符。code
令 P1 指向字符串原來的末尾位置,P2 指向字符串如今的末尾位置。P1 和 P2 從後向前遍歷,當 P1 遍歷到一個空格時,就須要令 P2 指向的位置依次填充 02%(注意是逆序的),不然就填充上 P1 指向字符的值。 PS :這裏的P1,是沒移動時的 P1 。 (P2 也會跟着移動),索引
--------------------------------------------------------------------------------------------------------------------------------------------------------字符串
a++ 的含義是先賦值後相加,如 b=a++; 先將a的值賦給b,而後a再加上1;++a的含義是先相加後賦值,如 b=++a 先將a加上1,而後再把加上1的a賦給b.io
setCharAt()class
該方法是StringBuffer中的方法,主要做用是將字符串中指定的位置的字符替換成目標字符,setCharAt(int index,char ch)index就是取代的位置 索引從0開始,ch是你要替換爲的字符串。遍歷
public class Solution { public String replaceSpace(StringBuffer str) { int P1 = str.length()-1;//P1 指向如今字符串中末尾 for(int i = 0;i <= P1;i++)//邊界條件,P1 == 0 ,終止 if(str.charAt(i)==' ')//chatAt()——提取指定字符串 str.append(" "); int P2 = str.length()-1; while(P1>=0&&P2>P1){//邊界的考察 char c = str.charAt(P1--);//該方法的返回指定索引處char值,這裏將 P1 值給了 c,再減一 if(c==' '){ str.setCharAt(P2--,'0');//先把P2換上0,再P2-1 str.setCharAt(P2--,'2'); str.setCharAt(P2--,'%'); }else{ str.setCharAt(P2--,c); } } return str.toString(); } }