注意一下StringBuffer函数的toString输出结果就是当前字符串;
StringBuffer继承的Object函数是:
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait;
这些函数可以被调用;
另外StringBuffer是final类,不可被重写;

答案1:将其转化为String格式,调用String的replace函数:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replace(" ", "%20");
    }
}

答案二:推荐用方法1。方法2是按照c++的实现思路的话应该是空间和时间的双重节省;
题解中貌似是采用setlength扩容;但是觉得而这个不大对,而且java的扩容其实就是数组的复制;

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int spacenum = 0;
        for(int i = 0; i < str.length(); i++){
            if(str.charAt(i) == ' '){
                spacenum++;
            }
        }
        int oldLength = str.length();
        int oldIndex = oldLength - 1;
        int newLength = oldLength + spacenum*2;
        str.setLength(newLength);
        int newIndex = newLength - 1;
        for(; oldIndex >= 0 && oldLength < newLength; oldIndex--){
            if(str.charAt(oldIndex) == ' '){
                str.setCharAt(newIndex--, '0');
                str.setCharAt(newIndex--, '2');
                str.setCharAt(newIndex--, '%');
            }else{
                str.setCharAt(newIndex--, str.charAt(oldIndex));
            }
        }
        return str.toString();
    }
}

答案3:调用StringBuffer的replace函数,估计效率低这个方法,用后者吧;

public class Solution {
    public String replaceSpace(StringBuffer str) {
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' '){
                str.replace(i,i+1,"%20");
            }
        }
        return str.toString();
    }
}

答案4:调用StringBuffer的append添加吧,再占用一个StringBuffer,空间上不尽如人意;

import java.util.*;
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<str.length();i++){
            char c = str.charAt(i);
            if(c == ' '){
                sb.append("%20");
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }
}