您的位置:首页 > Web前端

剑指offer--空格替换

2016-06-19 17:09 197 查看
空格替换

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

问题1:将空格替换成字符串,字符串将边长。若要是在原来的字符串上做替换,则保证字符串后面有足够的剩余空间。

问题2:若从头到尾的方向去替换,则每遇到一个空格,这个空格后面所有的字符都得向后移动两位,有的字符会被多次移动。

解决方案:

(1)从前向后遍历,得出空格数和字符数,计算出插入%20后的总长度。

(2)从后往前插入,在遇到空格前,先将字符向后移动。

这样字符串中的每个字符都只移动一次。

代码实现

<pre name="code" class="java">public class ReplaceBlank
{
public String replaceSpace(StringBuffer str)
{
if (str.length() <= 0)
return "";
int  numOfBlank = 0;
for (int i = 0; i < str.length(); i++)//统计空格 从前往后遍历
{
if(str.charAt(i) == ' ')
++ numOfBlank;
}
if(numOfBlank == 0)  //无空格的情况
return str.toString();

int newLength = str.length() + numOfBlank * 2;//新长度
int newIndex = newLength - 1;
int oldIndex = str.length() - 1;
str.setLength(newIndex + 1);
while(oldIndex >= 0 && newIndex > oldIndex)//从后往前替换
{
if (str.charAt(oldIndex) == ' ')//当遇到空格时,把%20插入并且oldIndex减一
{
str.setCharAt(newIndex--,'0');
str.setCharAt(newIndex--,'2');
str.setCharAt(newIndex--,'%');
}
else   //当无空格时将字符内容进行移动
{
str.setCharAt(newIndex--,str.charAt(oldIndex));
}
-- oldIndex;
}
return str.toString();
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  空格替换