分析:若从前往后遍历字符串插入%20移动的位数较多,每经过一次空格插入后,空格后面的字符都会往后移动
因此尝试从字符串后面往前面遍历,这样事先计算出需要的字符位数,再将%20插入,这样移动的位数较少
public class solution {
public static void main(String[] args) {
StringBuffer str1 = new StringBuffer("we are family");
// String str1 = "we are family";
System.out.println(replaceSpace(str1));
}
public static String replaceSpace(StringBuffer str){
int i = 0;
int oldnumber = 0;
int spacenumber = 0;
char[] string = str.toString().toCharArray();
// char[] string = str.toCharArray();
String newstring;
while(i<string.length){
if(string[i]==' '){
spacenumber++;
}
oldnumber++;
i++;
}
int newnumber = oldnumber+spacenumber*2;
char newstr[] = new char[newnumber];
int Poldnumber = oldnumber-1;
int Pnewnumber = newnumber-1;
while((Pnewnumber>=Poldnumber)&&(Pnewnumber>=0)){
if(string[Poldnumber]!=' '){
newstr[Pnewnumber--] = string[Poldnumber];
}
else {
newstr[Pnewnumber--] = '0';
newstr[Pnewnumber--] = '2';
newstr[Pnewnumber--] = '%';
}
Poldnumber--;
}
newstring = String.valueOf(newstr);
return newstring;
}
}