CI1.4 字符串空格替换

来源:互联网 发布:滨州大数据产业园 编辑:程序博客网 时间:2024/06/07 10:23

题目描述

编写一个方法,将字符串中的空格全部替换为”20%”。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的”真实长度”。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

解法

处理字符串操作问题时,常见做法是从字符串尾部开始编辑,从后往前反向操作。这种做法很有用,因为字符串尾部有额外的缓冲,可以直接修改,不必担心会覆盖原有数据。
我们将采用上面这种做法。该算法会进行两次扫描。第一次扫描先数出字符串中有多少空格,从而算出最终的字符有多长。第二次扫描菜真正反向编辑字符串。检测到空格则将%20复制到下一个位置,若不是空白,就复制原先的字符。

public class Main {    public static void main(String[] args) {        String s = "qwerz sdfht lo2 1234 ";        char[] c = s.toCharArray();        int length = c.length;        char[] chr = new char[1000];         for (int i = 0; i < c.length; i++) {            chr[i] = c[i];        }        replaceSpaces(chr, length);        for (char t : chr) {            System.out.print(t);        }    }    public static void replaceSpaces(char[] str, int length) { // 特别注意此处的length指的是字符串真实的长度        int i, newLength, spaceCount = 0;        for (i = 0; i < length; i++) {            if (str[i] == ' ') {                spaceCount++;            }        }        newLength = length + 2 * spaceCount;        str[newLength] = '\0'; // 节约空间用        for (i = length - 1; i >= 0; i--) {            if (str[i] == ' ') {                str[newLength - 1] = '0';                str[newLength - 2] = '2';                str[newLength - 3] = '%';                newLength = newLength - 3;            } else {                str[newLength - 1] = str[i];                newLength--;            }        }    }}

注:Java字符串不可变,此题选用字符数组解决这个问题(自始至终都在足够大的数组中)


上面的是程序员面试金典里的方法,不知道使用StringBuffer合不合要求

public class Main {    public static void main(String[] args) {        String s = "qwerz sdfht lo2 1234 ";        System.out.println(replaceSpaces(s));    }    public static String replaceSpaces(String str) {        StringBuffer sb = new StringBuffer();        for(int i = 0; i < str.length(); i++){            if(str.charAt(i) == ' '){                sb.append("%20");                continue;            }            sb.append(str.charAt(i));        }        return sb.toString();    }}

结果是一样的。。。

0 0