字符串替换空格

来源:互联网 发布:华为端口镜像配置 编辑:程序博客网 时间:2024/06/05 01:07

题目:实现一个函数,把字符串中的每一个空格替换为“%20”。

public class ReplaceBlack {    public static void main(String[] args) {        char[] result = replaceBlack("how are you!");        if (result != null) {            printchar(result);        }    }    // 替换空格    public static char[] replaceBlack(String originstr) {        char[] testchar;        if (originstr.length() > 00 && originstr != null) {            int oldlength = originstr.length();            int newlength = getBlackCount(originstr) * 2 + oldlength;//一个字符串变成了3个多了2个            testchar = new char[newlength];            int indexOfold = oldlength - 1;            int indexOfnew = newlength - 1;            System.arraycopy(originstr.toCharArray(), 0, testchar, 0,                    originstr.toCharArray().length);            System.err.println("未替换空格时的字符串");            printchar(testchar);            System.err.println("替换空格后的字符串");            while (indexOfold >= 0 && indexOfold != indexOfnew) {                if (testchar[indexOfold] == ' ') {                    testchar[indexOfnew--] = '0';                    testchar[indexOfnew--] = '2';                    testchar[indexOfnew--] = '%';                } else {                    testchar[indexOfnew--] = testchar[indexOfold];                }                indexOfold--;            }        } else {            return null;        }        return testchar;    }    public static int getBlackCount(String str) {        int count = 0;        for (int i = 0; i < str.length(); i++) {            String teststr = String.valueOf(str.charAt(i));            if (teststr.equals(" ")) {                count++;            }        }        return count;    }    public static void printchar(char[] testchar) {        for (int i = 0; i < testchar.length; i++) {            System.err.print(testchar[i]);        }        System.err.println();    }}

当初我是从前往后弄得,时间复杂度为O(n的平方),看了后面的时间复杂度为O(n)的解法,算法的优化无非就是时间复杂度和空间复杂度两个方向考虑,或者取舍平衡。从前往后,遇到空格,用”%”将空格替换,之后移动后面的字符,将”2”放入,再移动后面所有的字符串,将”0”放入,再移动后面所有的字符串。从后往钱就不会出现这种现象,一次成型。注意做之前要考虑清楚这个数据后边是否有足够的空间,是在原数组处理还是额外的数上处理。