目录
一、题目描述
请实现一个函数,将一个字符串(给定的是StringBuffer)中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
二、代码实现
1、String的replaceAll()方法
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" ", "%20");
}
}
此方法的缺点是:replaceAll()方法采用了正则表达式,内部会各种创建、销毁对象,性能比较差。
2、新开辟一段空间
public class Solution {
public String replaceSpace(StringBuffer str) {
String s = str.toString();
StringBuilder sb = new StringBuilder();
for (int i=0; i<s.length(); i++) {
char ch = s.charAt(i);
if (ch == ' ') {
sb.append("%20");
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
3、原地修改
先将原来的StringBuffer变到替换之后的总长度,再从字符串的后面开始复制和替换。
public class Solution {
public String replaceSpace(StringBuffer str) {
//1、增加总长度
int P1 = str.length() - 1; //原字符串的末尾
for (int i = 0; i <= P1; i++)
if (str.charAt(i) == ' ')
str.append(" ");
//2、从后往前复制
int P2 = str.length() - 1; //新字符串的末尾
while (P1 >= 0 && P2 > P1) {
char c = str.charAt(P1--);
if (c == ' ') {
str.setCharAt(P2--, '0');
str.setCharAt(P2--, '2');
str.setCharAt(P2--, '%');
} else {
str.setCharAt(P2--, c);
}
}
return str.toString();
}
}