替换空格

《剑指offer》面试题5:替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy.”,则输出“we%20are%20happy.”。

思路:从后往前遍历字符串替换。先遍历一遍字符串,统计空格的总数space_num,由此可计算出替换后的字符串的总长度new_len。(new_len = len + space_num * 2)。准备2个指针:p1和p2,p1指向原字符串末尾,p2指向替换后的字符串末尾,如果p1指向的是一个空格,则向p2 - 2到p2位置插入字符串“%20”,然后p2 左移3位,p1左移1位;如果p1指向的不是空格,则将p1指向的字符复制到p2处,然后p1,p2都左移1位。重复比较移动过程,直到p1=p2,替换结束。

代码如下:

public String replaceSpace(StringBuffer str) {
    if (str == null) {
        return null;
    }
    int len = str.length();
    int space_num = 0;
    for (int i = 0;i < len;i++) {
        if (str.charAt(i) == ' ') {
            space_num++;
        }
    }
    int new_len = len + space_num * 2;
    str.setLength(new_len);
    int p1 = len - 1;
    int p2 = new_len - 1;
    while(p1 >= 0 && p2 >= 0 && p1 < p2) {
        if (str.charAt(p1) == ' ') {
            str.replace(p2 - 2,p2 + 1,"%20");
            p2 = p2 - 3;
        } else {
            str.setCharAt(p2--,str.charAt(p1));
        }
        p1--;
    }
    return str.toString();
}

你可能感兴趣的:(替换空格)