每日一题(二)——替换空格

2018-04-17  本文已影响5人  寻玉儿

题目描述:请实现一个函数,将字符串的每个空格替换为"%20"。例如输入"We are happy",则输出"We%20are%20happy."。
思路:问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。 从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下。 从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。

public class ReplaceBank {
        
    public String replace(StringBuffer input) {
        if(input == null || input.length() == 0){
            return null;
        }
        
        int numberOfBlank = 0;
        for(int i=0; i<input.length(); i++){
            if(input.charAt(i) == ' ') {
                numberOfBlank++;
            }
        }
        
        int newLength = input.length() + 2 * numberOfBlank;     
        int indexOfOriginal = input.length() - 1;
        int indexOfNew = newLength - 1;     
        input.setLength(newLength);
        
        while(indexOfOriginal >=0 && indexOfNew > indexOfOriginal) {
            if(input.charAt(indexOfOriginal) == ' '){
                input.setCharAt(indexOfNew--, '0');
                input.setCharAt(indexOfNew--, '2');
                input.setCharAt(indexOfNew--, '%');
            }
            else {
                input.setCharAt(indexOfNew--, input.charAt(indexOfOriginal));
            }
            indexOfOriginal--;
        }
        
        return input.toString();
    }

    public static void main(String[] args) {
        ReplaceBank test = new ReplaceBank();
        // 输入的字符串包含空格:最后面,最前面,中间,连续空格
        StringBuffer str1 = new StringBuffer("We are happy.");
        StringBuffer str2 = new StringBuffer(" Wearehappy.");
        StringBuffer str3 = new StringBuffer("Wearehappy. ");
        StringBuffer str4 = new StringBuffer("We   are   happy  .");
        //输入的字符串没有空格
        StringBuffer str5 = new StringBuffer("Wearehappy.");
        //特殊输入测试:字符串只有连续空格、只有一个空格、字符串是一个null指针、字符串是一个空字符串;
        StringBuffer str6 = new StringBuffer("    ");
        StringBuffer str7 = new StringBuffer(" ");
        StringBuffer str8 = null;
        StringBuffer str9 = new StringBuffer("");
        System.out.println(test.replace(str1));
        System.out.println(test.replace(str2));
        System.out.println(test.replace(str3));
        System.out.println(test.replace(str4));
        System.out.println(test.replace(str5));
        System.out.println(test.replace(str6));
        System.out.println(test.replace(str7));
        System.out.println(test.replace(str8));
        System.out.println(test.replace(str9));

    }

}
上一篇下一篇

猜你喜欢

热点阅读