替换空格

《剑指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();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目05:替换空格 请实现一个函数,把字符串中的每个空格替换成"%20" 原因:在网络编程中,如果URL参数中含有...
    stoneyang94阅读 355评论 0 0
  • https://github.com/CyC2018/Interview-Notebook/blob/master...
    丹之阅读 453评论 0 0
  • 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替...
    云胡同学阅读 412评论 0 0
  • “她搬走了”,咕噜,随着最后一口酒,滑过喉咙,奔腾着、咆哮着,以气吞山河之势冲向胃里,L用他最漫不经心的语气,说了...
    小小小蜗牛阅读 216评论 0 0
  • 测试段落1 就是个段落,没啥具体内容,不用太在意。 这是个分段落 没想到h4这么大啊 呦呵,两个图片连着发居然还是...
    neiliw阅读 347评论 0 1