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();
}
注:在合并两个数组(包括字符串时),如果从前往后复制每个数字(或字符串),则需要重复移动数字(或字符)多次,那么可以考虑从后往前复制,这样就能够减少移动的次数,从而提高效率。
posted @ 2019-10-24 18:50  wangAQS  阅读(212)  评论(0)    收藏  举报