剑指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
上一篇 2025 年 6 月 22 日
下一篇 2025 年 6 月 22 日

相关推荐

  • CLion激活失败后能否继续试用?如何延长使用期?

    免责声明:以下激活补丁与序列号均源自互联网公开分享,仅供个人学习研究,请于 24 小时内删除,商业用途请购买官方授权! 先放战果图:CLion 2025.2.1 已顺利激活至 2099 年,爽歪歪! 下面用图文一步步演示最新版 CLion 的完整激活流程。 前期清理 若你曾尝试过其他补丁却失败,建议先卸载旧版本或手动清理配置,避免残留冲突。 放心删,代码工程…

    2025 年 9 月 8 日
    14200
  • 自动发放官方最新idea激活码和图文破解教程

    声明:以下破解补丁与激活码均搜集自互联网,仅供个人学习研究,禁止商业用途。若条件允许,请支持正版 JetBrains! IntelliJ IDEA 是 JetBrains 家族的明星 IDE,跨 Windows、macOS、Linux 三大平台,功能全面。本文手把手教你用破解补丁实现“永久授权”,解锁全部高级特性。 无论你装的是哪个版本、哪种系统,教程都帮你…

    IDEA破解教程 2025 年 10 月 23 日
    10000
  • 【IDEA注册码2025】IntelliJ IDEA 2025.1永久激活图文教程

    IntelliJ IDEA是目前市场上最受欢迎的Java开发环境之一,它为开发者提供了智能代码补全、强大的代码重构功能、丰富的调试工具以及与各种框架的无缝集成。这些功能大大提高了开发效率,但其专业版的价格对于许多个人开发者和学生来说可能难以承受。 今天我要分享的是IDEA 2025.1版本的永久激活方法,这个方法已经过测试,确保能够成功激活最新版本!让你可以…

    IDEA破解教程 2025 年 4 月 28 日
    1.4K00
  • IDEA激活没思路?这篇文章教你一步到位!

    免责声明:下文所述补丁与激活码均源于网络公开渠道,仅供个人学习交流,禁止商业用途。若条件允许,请支持正版:https://www.jetbrains.com/idea/buy/ JetBrains 出品的 IntelliJ IDEA 被誉为最强 Java IDE,跨 Windows、macOS、Linux 三大平台。本教程手把手教你利用破解补丁永久解锁全部高…

    IDEA破解教程 2025 年 9 月 17 日
    8700
  • 永久datagrip激活码合集及最新破解资源同步

    重要提示:下文所提及的 DataGrip 破解补丁与激活码均来源于互联网公开分享,仅供个人学习研究,禁止任何商业用途。若条件允许,请支持正版!官方正版低至 32 元/年,购买地址:https://panghu.hicxy.com/shop/?id=18 DataGrip 是 JetBrains 出品的多数据库管理 IDE,跨 Windows、macOS、Li…

    DataGrip激活码 8小时前
    700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信