题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
/*
思路:1.找到空格的个数
2.创建一个新的字符串个数为空格*2+原字符串长度
3.进行复制,在空格处用%20取代
思路是用空间换时间
但是offer上的两个指针的方法也很棒,直接把空间也省掉了还是自己思虑不周啊
*/
代码:
import java.util.Scanner;
public class zifu {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
StringBuffer str0=new StringBuffer(str);
// System.out.println(str0);
zifu zi=new zifu();
String fu=zi.replaceSpace(str0);
System.out.println(fu);
}
public String replaceSpace(StringBuffer str) {
int len=str.length();
// System.out.println(len);
int snum=0;
for(int i=0;i<len;i++){
if(str.charAt(i)==' '){
snum++;
}
}
//System.out.println(snum);
int len1=len+2*snum;
StringBuffer str1=new StringBuffer("");
//System.out.println(len1);
int j=0;
int i=0;
while(j<len1){
// if(str.charAt(i)==' '){
// str1.setCharAt(j,'%');
// System.out.println("j1:"+j);
// str1.setCharAt(j++,'2');
// System.out.println("j2:"+j);
// str1.setCharAt(j++,'0');
// System.out.println("j3:"+j);
// i++;
// }
// else{
// str1.setCharAt(j,str.charAt(i));
// j++;
// i++;
// }
if(str.charAt(i)==' '){
str1.append('%');
str1.append('2');
str1.append('0');
i++;
j=j+3;
}
else{
str1.append(str.charAt(i));
j++;
i++;
}
}
String str2=str1.toString();
return str2;
}
}
错误的地方已经被注释掉了
错误的原因是自己对string buffer的掌握不透彻。
空着的string buffer 是不能用setcharat这个方法的,否则会出现数组下标越界这样的错误。