面试题 5: 替换空格

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

整个字符串的替换在Java中有很多简便的方法,例如正则表达式。这里我们还是按照书上的方法来进行实现。将字符串看成是字符数组来进行相关处理。

代码实现以及相关理解:

    /**
     * 替换空格
     *
     * 方法的思想: 如果从前向后替换,每次对应空格后面的部分都要后移,如果有多个空格则有些部分会后移很多次;
     *            此方法先计算出空格的个数,然后在新数组中从后向前进行替换,则不会出现重复后移的情况(一步到位)
     *
     * 个人理解: 真正的使用中不会有这样的繁琐过程, 但是整体的算法思想是值得借鉴和学习的
     *
     * @param string
     * @return
     */
    private String replaceSpace(String string) {

        // 将字符串转换为字符数组形式
        char[] strs = string.toCharArray();

        // 统计字符串中所含的空格个数
        int spaceCount = 0;
        for (int i = 0; i < strs.length; i++) {
            if (strs[i] == ' ') {
                spaceCount++;
            }
        }

        // 初始化新的字符数组(按照替换后的字符个数),然后进行替换操作
        int originalIndex = strs.length - 1;
        int totalIndex = strs.length + spaceCount * 2 - 1;
        char[] newStrs = new char[totalIndex + 1];
        while (originalIndex >= 0 && totalIndex >= 0) {
            if (strs[originalIndex] == ' ') {
                newStrs[totalIndex--] = '0';
                newStrs[totalIndex--] = '2';
                newStrs[totalIndex--] = '%';
            } else {
                newStrs[totalIndex--] = strs[originalIndex];
            }
            originalIndex--;
        }

        // 返回退换成功的字符串
        return new String(newStrs);
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heynchy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值