题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路及实现:
解法一:遍历计算空格数以确定替换后字符串长度(原长+空格数*2),从后往前插入指定内容

public class Solution {
    public String replaceSpace(StringBuffer str) {
         int numBlank = 0;
         int N = str.length();
         for(int i = 0; i < N; i++) {         //计算空格数
             if(str.charAt(i) == ' ') {
                 numBlank++;
             }
         }
         str.setLength(N + 2 * numBlank);       //调整字符串长度
         int index1 = N - 1;
         int index2 = N + 2 * numBlank - 1;
         while(index1 >= 0) {                              //从后向前遍历,遇到空格即替换
             if(str.charAt(index1) == ' ') {
                 index1--;
                 str.setCharAt(index2--, '0');
                 str.setCharAt(index2--, '2');
                 str.setCharAt(index2--, '%');
             } else {
                 str.setCharAt(index2, str.charAt(index1));
                 index1--;
                 index2--;
             }
         }
         return new String(str);        //转化成指定返回类型
    }
}

解法二:再new一个空字符串,将原字符串逐个添加,遇到空格时复制指定内容

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	if(str == null)
    	{
    		return null;
    	}
    	int len = str.length();
    	//StringBuffer sb = new StringBuffer();
    	StringBuilder sb = new StringBuilder();
    	for(int i =0;i<len;i++)
    	{
    		if(str.charAt(i) == ' ')
    		{
    			sb.append("%");
    			sb.append("2");
    			sb.append("0");
    		}else
    		{
    			sb.append(str.charAt(i));
    		}
    	}
    	return sb.toString();              //转化成指定返回类型
    }
}

解法三:借助java本身的replace(),遍历字符串,遇到空格就替换

public class Solution {
    public String replaceSpace(StringBuffer str) {
     if(str==null)
     {
        return null;
     }
     for(int i=0;i<str.length();i++)
     {
         char c = str.charAt(i);
         if(c==' ')
         {
            str.replace(i,i+1,"%20");
         }
      }
      String newstr = str.toString();             //转化成指定返回类型
      return newstr;   
    }
}

方法四:借助delete()和insert()

public class Solution {
public static String replaceSpace(StringBuffer str) {
 
        for (int i = str.length() - 1; i >= 0; i--) {
            if (str.charAt(i) == ' ')
            {   str. deleteCharAt(i);
                str.insert(i, "%20");
            }
        }
 
        return str.toString();              //转化成指定返回类型
    }
 
}

关于哪种解法比较好,各路大神众说纷纭,个人觉得看具体的需求吧,毕竟有些时候苛求时间,有些时候苛求空间。