题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy
思路
不用开辟新空间的做法。
先计算出替换后的字符串总长度,维护新字符串的索引 j, 旧字符串的索引 i 。(新旧并不是说生成了新字符串,之前便于区分)
索引 i 从前往后读取字符串信息
索引 j 从后向前生成字符串,当索引 i 对应的 str[ i ] 是空格时, 就在索引 j 依次添加 0 2 % ( 这里具体看代码吧) ; 否则就添加上str[ i ];
从后向前进行构造字符串,这是为什么呢?因此构造后的字符串总比构造前要长,如果从前向后构造,那么会替换掉构造前的字符串,造成数据丢失。
代码
public String replaceSpace(StringBuffer str) {
int cnt = 0;
for (int i = 0, j = str.length(); i < j; i++) {
if(str.charAt(i) == ' ')
cnt++;
}
int j = str.length() - cnt + cnt * 3 - 1;
int i = str.length() - 1;
str.setLength(j+1);
while (i >= 0) {
if (str.charAt(i) == ' ') {
str.setCharAt(j--,'0');
str.setCharAt(j--,'2');
str.setCharAt(j--,'%');
}else str.setCharAt(j--,str.charAt(i));
i--;
}
return str.toString();
}