题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:替换分为两种,(1)创建一个新的字符串(2)在原来的字符串上替换第一种:把We Are Happy转换成字符数组,然后创建一个字符串str,将字符数组里的字符依次加到新建的字符串str后边,当出现空格的时候,将字符‘%20’加到字符串str后边,醉胡返回str
代码:创建一个新的字符串
public String replaceSpace(StringBuffer str) {
String returnstr="";
char c[] = str.toString().toCharArray();
for(int i=0;i<str.length();i++)
{
if(String.valueOf(c[i]).equals(" "))
{
returnstr += "%20";
continue;
}
returnstr += String.valueOf(c[i]);
}
return returnstr;
}
第二种:利用StringBulider或StringBuffer的可变性解决。首先将”%20“看成“%”+“2”+"0",所以每次替换数组的长度加长2。首先计算替换后的长度newlength,然后利用StringBuffer的setLngth(newlength);将str的长度设置为替换之后的长度,然后利用setCharAt(index, char)将字符串str从后往前移,当遇到空格,就换成‘%’,'2','0'.
代码:在原字符串上修改
public String replaceSpace(StringBuffer str) {
int count = 0;
int oldlength = str.length();
char c[] = str.toString().toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == ' ') {
count += 3;
} else {
count++;
}
}
int newlength = count;
str.setLength(newlength);
int newlengthindex = newlength - 1;
int oldlengthindex = oldlength - 1;
while (newlengthindex >= 0) {
if (str.charAt(oldlengthindex) == ' ') {
str.setCharAt(newlengthindex--, '0');
str.setCharAt(newlengthindex--, '2');
str.setCharAt(newlengthindex--, '%');
oldlengthindex--;
} else {
System.out.println(str.charAt(oldlengthindex));
str.setCharAt(newlengthindex--, str.charAt(oldlengthindex--));
}
}
return str.toString();
}