题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路一:从前往后数出空格数,避免数组越界,从后往前将数组后移
public class Solution {
public String replaceSpace(StringBuffer str) {
int spaceNum=0;
int len=str.length();
for(int i=0;i<len;i++){
if(str.charAt(i)==' '){
spaceNum++;
}
}
str.setLength(len+spaceNum*2);//要扩大长度,避免越界
for(int i=len-1;i>=0 && spaceNum>0;i--){//注意spaceNum>0
if(str.charAt(i)!=' ')str.setCharAt(i+spaceNum*2,str.charAt(i));
else{
str.setCharAt(i+spaceNum*2,'0');
str.setCharAt(i+spaceNum*2-1,'2');
str.setCharAt(i+spaceNum*2-2,'%');
spaceNum--;
}
}
return str.toString();
}
}
这里用到StringBuffer的函数:
setLength(int length)
char charAt(int index)
setCharAt(int index,char x)
String toString()
思路二:新建一个StringBuilder,依次添加原字符串中的字符,遇到空格时依次添加‘%’,‘2’,‘0’
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null) return null;
StringBuilder newstr = new StringBuilder();
for(int i=0;i<str.length();i++){
if(str.charAt(i)==' '){
newstr.append('%');
newstr.append('2');
newstr.append('0');
}
else newstr.append(str.charAt(i));
}
return newstr.toString();
}
}
StringBuilder newstr = new StringBuilder()
newstr.append(char x)
newstr.toString()