题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:我们可以先遍历一遍字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换后的字符串的总长度。重新生成一个替换后字符串长度的char数组,分别从旧字符串和新字符串的尾部开始循环,依次往前比较,只要遇到了空格就替换为%20。如果没有遇到空格就直接复制过来就行。 合并两个数组(包括字符串),如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前合并,这样可以减少移动的次数,从而提高效率。
public class ReplaceSpace {
public String replaceSpace(StringBuffer str) {
String s = str.toString();
//统计空格数
int count = getBlankNum(str.toString());
//获取原来字符串的长度
int originalStrLen = s.toCharArray().length;
//计算替换空格之后需要的长度
int newStrLen = count * 2 + originalStrLen;
char[] tempArray = new char[newStrLen];
//把原字符串复制到tempArray数组中
System.arraycopy(s.toCharArray(), 0, tempArray, 0, originalStrLen);
int originalStrIndex = originalStrLen - 1;
int newStrIndex = newStrLen -1;
//当originalStrIndex == newStrIndex的时候替换完毕
while(originalStrIndex >= 0 && originalStrIndex != newStrIndex){
if(tempArray[originalStrIndex] == ' '){
tempArray[newStrIndex--] = '0';
tempArray[newStrIndex--] = '2';
tempArray[newStrIndex--] = '%';
}else{
tempArray[newStrIndex--] = tempArray[originalStrIndex];
}
originalStrIndex--;
}
return new String(tempArray);
}
/**
* 计算空格数
* @param string
* @return
*/
private int getBlankNum(String string) {
int count = 0;
for (int i = 0; i < string.length(); i++) {
if(string.charAt(i) == ' '){
count++;
}
}
return count;
}
}