注意一下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(); } }