题目: 请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy.”,则输出“we%20are%20happy.”
解题思路:
- 首先求出原字符串的长度
length
,然后求出替换空格后字符串的新长度newLength
;然后将两者作为字符串的下标,指向对应位置;如下图所示:
- 然后从后向前依次复制字符串的内容,每复制一个字符,对应
length--;newLength--;
; - 每当
length
下标对应的字符为空格时,就把空格内容替换为%20
,同时执行一次length--
,3次newLength--
; - 当
length==newLength
时,结束。
整个过程图示如下:
代码实现:
public static void replaceBlank(char[] string){
if (string==null||string.length<=0)
return;
int length= string.length;
//originalLength为字符串string的实际长度
int originalLength=0;
//字符串中的空格数量
int numberOfBlank=0;
int i=0;
while (string[i]!='\0'){
++originalLength;
if (string[i]==' ')
++numberOfBlank;
++i;
}
//将字符串中的空格替换成 %20,之后字符串的新长度
int newLength=originalLength+numberOfBlank*2;
//如果字符串的新长度大于length,则退出,因为替换之后会造成数组越界
if (newLength>length)
return;
int indexOfOriginal=originalLength;
int indexOfNew =newLength;
while (indexOfOriginal>=0&&indexOfNew>indexOfOriginal){
//如果是空格,则将其替换成 %20 并将indexOfNew向前移动3位
if (string[indexOfOriginal]==' '){
string[indexOfNew--]='0';
string[indexOfNew--]='2';
string[indexOfNew--]='%';
}
//如果不是空格则将indexOfNew向前移动一格
else {
string[indexOfNew--]=string[indexOfOriginal];
}
--indexOfOriginal;
}
}