题目:请实现一个函数,把字符串中的每个空格替换成”%20“。例如,输入“We are happy”,则输出”We%20are%20happy”。
思路,联想到从尾部循环替换的思想(在冒泡排序算法之中也是从尾部往前进行比较然后交换的),于是形成如下的思路:首先统计出该字符串中所有的空格数量,并重新计算新串所需的char数组的长度,把旧串转化成的char数组拷贝到一个临时数组中,并同时创建一个新的char数组,该新数组的长度是计算之后的长度。从该新数组的尾部开始循环,依次往前比较,只要遇到了空格就替换为%20。如果没有遇到空格就直接复制过来就行。
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));
}
}
String s=newstr.toString();
return s;
}
}
void ReplaceBlank(char string[],int length)
{
if(string==NULL||length<=0)
return;
/*originalLength为字符串string的实际长度*/
int originalLength=0;
int numberofBlank=0;
int i=0;
while(string[i]!='\0')
{
++originalLength;
if(string[i]==' ')
++numberofBlank;
++i;
}
/*newLength为把空格替换成'%20'之后的长度*/
int newLength=originalLength+numberofBlank*2;
if(newLength>length)
return;
int indexofOriginal=originalLength;
int indexofNew=newLength;
while(indexofOriginal>=0 && indexofNew>indexofOriginal)
{
if(string[indexofOriginal]==' ')
{
string[indexofNew--]='0';
string[indexofNew--]='2';
string[indexofNew--]='%';
}
else
{
string[indexofNew--]=string[indexofOriginal];
}
--indexofOriginal;
}
}