美文网首页
每日一题(二)——替换空格

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

作者: 寻玉儿 | 来源:发表于2018-04-17 18:16 被阅读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));
    
        }
    
    }
    

    相关文章

      网友评论

          本文标题:每日一题(二)——替换空格

          本文链接:https://www.haomeiwen.com/subject/zrupkftx.html