Java代码实现替换空格

剑指Offer-替换空格

题目: 实现一个函数,把字符串中的每一个空格替换为"%20"。
背景: 在URL中存在一些特殊字符,如空格、#等,我们需要把这些特殊字符转换为服务器所能识别的字符,转换的规则为在%后加上ASCII码的两位十六进制的表示。
思路如下

如果每一次发现一个空格就在这个空格的位置插入一个%20的话,考虑不覆盖后边的字符的情况下,就要将后边的进行后移,而如果中间穿插多个空格就会导致部分字符串进行多次后移,这样肯定不是最让人满意的答案。在允许自己分配足够的内存的情况下,因为一个空格替换需要多出来两个长度,则分配一个丁长发的新字符串,再逐次重新写新字符串

public static String replaceSpace(String str){
        if (null == str || str.isEmpty()) return null;

        int le = str.length();

        char[] chars = str.toCharArray();
        //计算空格的数量
        int spaceCount = 0;
        for (char c : chars) {
            if (c == ' '){
                spaceCount ++;
            }
        }
        if (spaceCount == 0) return str;
        int newLe = le+spaceCount*2;
        char[] newChar =  new char[newLe];
        
        int p2 = newLe - 1;

        for (int i = chars.length - 1; i >= 0; i--) {
            if (' ' != chars[i]){
                newChar[p2--] = chars[i];
            }else{
                newChar[p2--] = '0';
                newChar[p2--] = '2';
                newChar[p2--] = '%';
            }
        }
        return new String(newChar);
    }

测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值