题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解析
一:调用自带函数
public String replace01(StringBuffer str){
return str.toString().replace(" ","%20");
}
public String replace03(StringBuffer str){
int n=str.length();
for (int i = 0; i < n; i++) {
if(str.charAt(i)==' '){
n += 2;
str.replace(i,i+1,"%20");
}
}
return str.toString();
}
二:用新的数组保存
public String replace02(StringBuffer str){
StringBuffer out=new StringBuffer();
for (int i = 0; i < str.toString().length(); i++) {
char b=str.charAt(i);
if(String.valueOf(b).equals(" ")){
out.append("%20");
}else{
out.append(b);
}
}
return out.toString();
}
三:Java双指针实现
public String replace04(StringBuffer str){
// 计算空格的数量
int blankNum=0;
for (int i = 0; i < str.length(); i++) {
if(str.charAt(i)==' '){
blankNum++;
}
}
// 记录初始的字符串、插入后的字符串的长度
int originalStringLength=str.length();
int newStringLength=originalStringLength+2*blankNum;
// 重新设置str的长度
str.setLength(newStringLength);
// 定义两个指针,分别指向新旧字符串的末尾
int indexOfOriginalString=originalStringLength-1;
int indexOfNewString=newStringLength-1;
// 结束条件及确保是否越界
while(indexOfOriginalString>=0 && indexOfNewString>indexOfOriginalString){
if(str.charAt(indexOfOriginalString)==' '){
// 插入 %20
str.setCharAt(indexOfNewString--,'0');
str.setCharAt(indexOfNewString--,'2');
str.setCharAt(indexOfNewString--,'%');
}else{
str.setCharAt(indexOfNewString--,str.charAt(indexOfOriginalString));
}
indexOfOriginalString--;
}
return str.toString();
}