剑指offer-3(替换空格)

题目:

实现一个方法,把一个字符数组里面的空格全部替换为“20%”。

 

思路:

首先呢,要先获取字符数组中有多少个空格以及字符数组中字符的长度,计算出替换后的长度;然后,让一个虚拟指针indexOfNew指想新长度大小的那个下标位置,让另一个虚拟指针indexOfOriginal指向原字符长度大小的那个下表位置,判断indexOfOriginal下表位置的是不是为空格,如果是,indexOfNew下表位置以及前面两个位置依次放入0,2,%;indexOfOriginal前移。继续判断;如果不是空格,直接把indexOfOriginal处的字符放到indexOfNew下表位置。

 

代码:

public class Test04 {
    /*
     * length为字符数组的总容量
     */
    public static void replaceBlank(char[] string,int length){
        
        if(string ==null || length<1){
            return;
        }
        int originalLength = 0;//字符的实际长度
        int blankLength = 0;//空格的个数
        int i = 0;
        while(i < length && string[i] != '\u0000'){
            ++originalLength;
            if(string[i]==' '){
                ++blankLength;
            }
            i++;
            
        }
        //新的长度为字符长度加上空格个数乘以2,本来是20%三个字符,因为还要去一个空格,相当于每遇到一个空格,长度就需要增加两个
        int newLength = originalLength + blankLength * 2;
        if(newLength > length)
            return;
        int indexOfOriginal = originalLength;
        int indexOfNew = newLength;
        while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){
            if(string[indexOfOriginal] == ' '){
                string[indexOfNew--] = '0';
                string[indexOfNew--] = '2';
                string[indexOfNew--] = '%';
            }else{
                string[indexOfNew--] = string[indexOfOriginal];
            }
            --indexOfOriginal;
            
        }
        
        for (int j = 0;j<newLength;j++) {
            System.out.print(string[j]);
        }
        
    }
    
    public static void main(String[] args) {
        char[] str = new char[20];
        str[0] = 'h';
        str[1] = 'e';
        str[2] = 'l';
        str[3] = 'l';
        str[4] = 'o';
        str[5] = ' ';
        str[6] = 'w';
        str[7] = ' ';
        replaceBlank(str,str.length);
    }

}

 

posted @ 2018-12-17 09:14  自带锋芒  阅读(142)  评论(0编辑  收藏  举报