剑指offer-2、替换空格

题目阐述

请设计一个函数,将字符串中的空格替换成“%20”。例如,给定字符串“We Are Happy”,经替换后会变为“We%20Are%20Happy”。

思路与解决办法

运用API函数

在Java里存在可直接使用的replace函数,直接按如下方式编写就能达成目标。

public String replaceSpace(StringBuffer str) {
    String result = str.toString().replace(" ", "%20");
    return result;
}

借助StringBuilder拼接

采用额外的空间来处理。对字符串进行遍历,利用StringBuilder进行字符串的拼接操作,碰到空格就添加“%20”,不是空格则直接添加。

public class Solution {
    public String replaceSpace(StringBuffer str) {
        // 若字符串为空,直接返回null
        if (str == null) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ') {
                sb.append("%20");
            } else {
                sb.append(str.charAt(i));
            }
        }
        return sb.toString();
    }
}

不过这里用到了额外的空间,依靠StringBuilder来存储内容。

不使用额外空间

若不使用额外空间,那就得在原字符串上进行修改:

  1. 将字符串转换成字符数组,遍历一次来统计空格的个数。
  2. 对数组进行扩容,保证空格替换成“%20”时有足够的空间:新的长度 = 原来的字符数组长度 + 空格个数×2。
  3. 再次遍历,进行复制操作,遇到非空格字符就直接复制,遇到空格时,就把“%20”这三个字符依次复制进去。
public class Solution {
    public String replaceSpace(StringBuffer str) {
        // 转换成字符数组
        char[] originChars = str.toString().toCharArray();
        int spaceNum = 0;
        // 计算空格的个数
        for (int i = 0; i < originChars.length; i++) {
            if (originChars[i] == ' ') {
                spaceNum++;
            }
        }
        // 新字符数组的长度
        int newCharsLength = originChars.length + 2 * spaceNum;
        int newStrIndex = 0;
        for (int index = 0; index <= originChars.length - 1; index++) {
            if (originChars[index] != ' ') {
                // 直接复制
                newChars[newStrIndex++] = originChars[index];
            } else {
                // 空格则需要复制三个字符
                newChars[newStrIndex++] = '%';
                newChars[newStrIndex++] = '2';
                newChars[newStrIndex++] = '0';
            }
        }
        // 转成字符串
        return new String(newChars);
    }
}

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12610.html

(0)
LomuLomu
上一篇 9小时前
下一篇 13分钟前

相关推荐

  • 如何做好软件架构师

    本文以个人视野聊下软件架构师的工作以及软件架构设计知识。做开发工作接近10年了,期间主要做Windows应用开发。在成熟的“华南区最大WPF团队”希沃白板呆了较长一段时间、后面从0到1构建Windows技术栈以及会议屏软件集,在软件设计这块自己成长了很多。之前整理过如何做好技术经理 – 唐宋元明清2188 – 博客园,这里梳理下自己的设计思维,算是自己阶段性…

    未分类 2025 年 1 月 12 日
    20800
  • 2025年最新PyCharm激活码分享 – 永久破解PyCharm详细教程

    PyCharm作为Python开发者最喜爱的IDE之一,其专业版功能强大但需要付费。本文将为大家带来最新PyCharm 2024.3版本的永久破解方法,让你的PyCharm一直用到2099年! 破解效果预览 先看看破解成功后的效果,可以看到许可证有效期已经延长至2099年! 这个方法适用于JetBrains全家桶,包括IDEA、PyCharm、DataGri…

    2025 年 5 月 9 日
    1.1K00
  • 2025年最新DataGrip永久破解教程 | 附激活码&注册码一键破解至2099年 🚀

    本教程适用于JetBrains全家桶(IDEA、PyCharm、DataGrip、GoLand等),亲测有效!💯 先上成功破解截图镇楼!✨ 可以看到我的DataGrip已经成功激活到2099年了,简直不要太爽!😎 下面我就手把手教你如何用最简单的方法破解DataGrip,这个方法同样适用于其他JetBrains产品哦!👇 第一步:下载DataGrip安装包 …

    DataGrip激活码 5天前
    4600
  • 2025年最新DataGrip永久破解教程(附激活码/注册码)🔥

    🚀 本教程适用于Jetbrains全家桶(IDEA、PyCharm、DataGrip、Golang等),亲测有效! 先给大家看看最新版本的破解成果,直接续命到2099年,简直不要太爽!✨ 下面将手把手教你如何激活DataGrip,这个方法同样适用于旧版本哦~💡 无论你用的是Windows、Mac还是Linux系统,都能轻松搞定! 第一步:下载DataGrip…

    DataGrip激活码 2025 年 6 月 14 日
    8300
  • MySql 9 in Docker 主从切换

    继上一篇《MySql 9 in Docker 利用克隆插件搭建主从》我们说了主从复制后, 那么我们接下来说说如何手动的进行主从切换。 动手~ 1. 原主库设置 切断应用对主库的访问 主库设置为只读状态 set global read_only=ON;set global super_read_only=ON; 主库执行 SELECT @@gtid_execu…

    未分类 2024 年 12 月 24 日
    35900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信