替换字符串中空格为”%20“

TIPS:‘%20’有三个字符构成,遍历直接替换的话需要增加字符串的空间,然后进行移位和替换,因此,先计算空格数目,直接算好替换后需要空间,然后从尾部开始遍历。

算法流程:

遍历字符串,记录下有多少个空格;

从字符串尾部重新解析:

  (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--;
	}
}

  

posted @ 2014-04-12 21:06  狂奔蚂蚁  阅读(283)  评论(0编辑  收藏  举报