替换字符串中空格为”%20“
TIPS:‘%20’有三个字符构成,遍历直接替换的话需要增加字符串的空间,然后进行移位和替换,因此,先计算空格数目,直接算好替换后需要空间,然后从尾部开始遍历。
算法流程:
1 遍历字符串,记录下有多少个空格;
2 从字符串尾部重新解析:
(1) 如果当前字符为空格,在写入字符串'%20'
(2) 非空格则直接记录。
/* * length为字符数组的容量 */ private static void replaceBlank(char[] string, int length) { if (string==null||length==0) { return; } //originalLength为字符的总长度 int originalLength=0; int blankLength=0,index=0;//空格的个数 while (string[index]!='\0') { originalLength++; if (string[index]==' ') { blankLength++; } ++index; } //替换后的长度 int newLength=originalLength+blankLength*2; if (newLength>length) { return; } //从后往前,依次复制原始串中字符,并将空格替换为"20%" int indexOfNew=newLength; int indexOfOriginal=originalLength; while (indexOfOriginal>=0&&indexOfNew>indexOfOriginal) { if (string[indexOfOriginal]==' ') { string[indexOfOriginal--]='0'; string[indexOfOriginal--]='2'; string[indexOfOriginal--]='%'; } else { string[indexOfNew--]=string[indexOfOriginal]; } indexOfOriginal--; } }