题目要求:
将一个字符串中的每个空格替换成“%20”。
示例:
输入:s = "We are happy."
输出:"We%20are%20happy."
方法一
调用String类中的 replaceAll 方法,将所有空格替换成 %20
public String replaceSpace(String s) {
String res = s.replaceAll(" ","%20");
return res;
}
方法二
从空格变成 %20 ,长度增加了2,若有n个空格,整个字符串的长度就增加了 2 * n。
- 我们先计算出最终字符串的长度
- 使用旧索引指向原字符串最后一个字符,新索引指向新长度的最后一个位置
- 从后往前遍历,不是空格自己搬移元素,是空格就换成 %20
代码实现:
public String replaceSpace(StringBuffer str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i) == ' '){
count ++;
}
}
//新的长度
int newLength = str.length() + 2*count;
//旧索引指向原字符串最后一个字符
int oldIndex = str.length() -1;
//新索引指向新长度的最后一个位置
int newIndex = newLength - 1;
//重新设置字符串的长度
str.setLength(newLength);
while (oldIndex >= 0 && newIndex >= 0){
if(str.charAt(oldIndex) == ' '){
//遇到空格,换成 %20
str.setCharAt(newIndex --,'0');
str.setCharAt(newIndex --,'2');
str.setCharAt(newIndex --,'%');
oldIndex --;
}else {
//不是空格,直接搬移元素
str.setCharAt(newIndex -- ,str.charAt(oldIndex));
oldIndex --;
}
}
return str.toString();
}