字符串中替换空格

实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“we are happy”,则输出“we%20are%20happy”.

首先想到的是原来是一个空格字符,替换之后变成‘%’‘2’和‘0’这3个字符,因此字符串会变长。还要考虑到时间复杂度。
我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2。

下面为详细代码:

public class No4 {

    /**
     * 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.“,则输出”We%20are%20happy.“。
     *
     * @param string     要转换的字符数组
     * @return 转换后的字符串
     */
    public static String replaceBlank(char[] string){
        //判断输入是否合法
        if(string == null){
            return null;
        }

        //统计字符数组中的空白字符数
        int whiteCount = 0;
        for(int i = 0; i < string.length; i++){
            if(string[i] == ' '){
                whiteCount++;
            }
        }
        //判断空格是否为0个
        if(whiteCount == 0){
            return null;
        }
        //计算转换后的字符长度是多少
        int targetLength = whiteCount * 2 + string.length;
        char[] temp = new char[targetLength];
        int j = targetLength - 1;//从新数组最末尾开始
        int i = string.length - 1;//从字符串最末尾开始

        while(i >= 0){
            if(string[i] == ' '){
                temp[j--] = '0';
                temp[j--] = '2';
                temp[j--] = '%';
            } else {
                temp[j--] = string[i];

            }
            i--;
        }

        return new String(temp);
    }

    public static void main(String[] args) {
        String str = "We are happy.";
        char[] array = str.toCharArray();
        System.out.println(replaceBlank(array));
        String str1 = "Wearehappy.";
        char[] array1 = str1.toCharArray();
        System.out.println(replaceBlank(array1));
        String str2 = " Wearehappy.";
        char[] array2 = str2.toCharArray();
        System.out.println(replaceBlank(array2));
        String str3 = " ";
        char[] array3 = str3.toCharArray();
        System.out.println(replaceBlank(array3));

    }
}

gtihub上的源码

查看源码请点击这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值