5、替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解法:从前往后遍历,确定空格的个数,计算出新字符串的长度。再从后往前遍历,替换原来的空格。
public String replaceSpace(StringBuffer str) { //spacenum为计算空格数 int spacenum = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == ' ') spacenum++; } //indexold为为替换前的str下标 int indexold = str.length() - 1; //计算空格转换成%20之后的str长度 int newlength = str.length() + spacenum * 2; //indexold为为把空格替换为%20后的str下标 int indexnew = newlength - 1; //使str的长度扩大到转换成%20之后的长度,防止下标越界 str.setLength(newlength); for (; indexold >= 0 && indexold < newlength; indexold--) { if (str.charAt(indexold) == ' ') { // str.setCharAt(indexnew--, '0'); str.setCharAt(indexnew--, '2'); str.setCharAt(indexnew--, '%'); } else { str.setCharAt(indexnew--, str.charAt(indexold)); } } return str.toString(); }
注:在合并两个数组(包括字符串时),如果从前往后复制每个数字(或字符串),则需要重复移动数字(或字符)多次,那么可以考虑从后往前复制,这样就能够减少移动的次数,从而提高效率。

浙公网安备 33010602011771号