注意一下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();
}
}
京公网安备 11010502036488号