题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public class Solution {
public String replaceSpace(StringBuffer str) {
//方法一
String tp = str.toString();
tp = tp.replace(" ", "%20");
return tp;
//方法二
StringBuilder sb = new StringBuilder();
for(int i=0; i<str.length(); i++){
if(str.charAt(i) == ' ')
sb.append("%20");
else//注
sb.append(str.charAt(i));
}
return sb.toString();
}
}
注:不加else输出会有空格??
笔记:
- 方法一:将StringBuffer类的str转换为String类的tp,从而调用replace()方法。缺点是运行速度 String<StringBuffer<StringBuilder(知识点):
1.String是不可变的对象,其定义为:public final class String extends Object
2.StringBuffer和StringBuilder底层是char[]数组实现的,StringBuffer是线程安全的,而StringBuilder不是。在单线程等不考虑线程安全的情况下,可以使用StringBuilder效率更高(但其实没有高特别多,具体见性能比较)。
1.StringBuffer比StringBuilder多了一个toStringCache字段,用来在toString方法中进行缓存。在重复调用toString()时能提升效率
2.字符长度越大,二者消耗的时间越接近。
- 方法二:用到了append()追加字符串方法。