问题描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1、最简单的办法:直接使用java里的replaceAll()方法。
public class Solution {
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll(" ","%20");
}
}
2、使用StringBuffer里的append()追加方法,需要替换则将要替换的追加在后面,不需要替换则将原本的字符追加在后面。
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer out = new StringBuffer();
for(int i = 0;i<str.toString().length();i++){
char c = str.charAt(i);
if(c == ' '){
out.append("%20");
}else{
out.append(c);
}
}
return out.toString();
}
}
3、从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下。
从后往前替换,先从前往后计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
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 indexOld = str.length()-1;
//新的长度比原来的多了两倍的空格数
int lengthNew = str.length()+spacenum*2;
int indexNew = lengthNew-1;
//扩大StringBuffer str的长度,防止下标越界
str.setLength(lengthNew);
//for循环进行挪动
for(;indexOld >= 0;indexOld--){
//当前字符为空格时,依次向前写入02%
if(str.charAt(indexOld) == ' '){
str.setCharAt(indexNew--,'0');
str.setCharAt(indexNew--,'2');
str.setCharAt(indexNew--,'%');
}else{
//当前字符不为空格是直接挪动
str.setCharAt(indexNew--,str.charAt(indexOld));
}
}
return str.toString();
}
}