剑指offer5:替换空格

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

1.对于这种数组复制题目,主要从后往前处理。

2.Java来写最好是StringBuilder 加上reverse.toString来处理

3.2个指针,p1指针指向原数组的末尾,P2指针指向新复制的数组的末尾,当p1不为空时,p1复制到p2,同时p1--,p2--,当p1指向为空时,在p2连续填入需要的值,同时,p2递减相应的次数,p1--.

package com.hnist.lzn.jinazhioffer;

public class TIhuanBlock {

    char[] RepalceBlank(char[] string,int length){

            if(string==null||length<=0){

                return null;
            }

            int originLength=0;
            int numberOfBlank = 0;
            int i = 0;
            //Java数组最后一个不是'\0'
            while(i<length){

                //扫描大小
                ++originLength;
                if(string[i]==' '){

                    ++numberOfBlank;
                }

                ++i;

            }
            //为啥是*2
            int newLength = originLength+numberOfBlank*3;
            //以及为啥是>
            if(newLength<length)
                return null;

            //new数目够的情况
            char[] strings = new char[newLength];

            //防止越界
            int indexOfOriginal = originLength-1;
            int indexOfNew = newLength-1;

            while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal){

                if(string[indexOfOriginal]==' '){

                    strings[indexOfNew--]='0';
                    strings[indexOfNew--]='2';
                    strings[indexOfNew--]='%';

                }else{

                    strings[indexOfNew--] = string[indexOfOriginal];
                }

                --indexOfOriginal;

            }

           return strings;

    }

    public static void main(String[] args) {

            String nums = "we are happy";

            char[] string = nums.toCharArray();

           char[] strings =  new TIhuanBlock().RepalceBlank(string,string.length);

            for(int i=0;i<strings.length;i++){

                System.out.print(strings[i]);
            }

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值