题目:空格替换
描述:请实现一个函数,把字符串中的每一个空格替换成"%20"。例如,输入"We are happy.",则输出"We%20are%20happy."。
方法一:简单的进行替换 用StringBuffer的append方法,当遇到空格,那就直接append上%20,这样就可以完成替换啦。
方法二:遍历输入的字符串,每遍历到空格,便将长度+2,因为每一个空格替换成%20长度是增加2的,然后得到新的长度,也就是替换之后的总长度。再弄俩"指针",然后对字符串进行扩容,一个指针a指向原长度末尾的位置,另一个指针b指向新长度末尾的位置,然后a指针指向的地方如果不是空格,那么b指针处直接复制a指针的值,a指针如果遇到空格,a往前移动一格,b处写入"%20"
方法一
public static String replace(String str) {
if (str == null || str.length() <= 0) {
return null;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++ ) {
if (str.charAt(i) == ' ' ) {
sb.append("%20");
} else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
方法二
public static String replaceTwo(StringBuffer str) {
if (str == null || str.length() <= 0) {
return null;
}
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count += 2;
}
}
int oldLength = str.length() - 1;
// 扩容
str.setLength(str.length() + count);
int newLength = str.length() - 1;
while(newLength > oldLength) {
if (str.charAt(oldLength) != ' ') {
str.setCharAt(newLength--,str.charAt(oldLength));
} else {
str.setCharAt(newLength--, '0');
str.setCharAt(newLength--, '2');
str.setCharAt(newLength--, '%');
}
oldLength--;
}
return str.toString();
}
总结:主要考察思维能力,往往很容易想到的方法大多都不是最优解。