剑指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 日

相关推荐

  • 多客户端会话管理的高效化解方案

    多客户端会话管理的高效解决之道 扫描二维码关注或微信搜索:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 一 多客户端会话标识管理 会话标识生成原理 会话标识(Session ID)采用UUID4算法生成128位全局唯一标识,结合HMAC-SHA256签名以确保防篡改: …

    2025 年 8 月 4 日
    51400
  • ChatGPT Plus新手开通充值教程

    很多人能正常登录 ChatGPT,但 Plus 订阅付款并不顺手。 国内用户更希望用微信或支付宝完成购买,再把会员开通到自己的原账号。下面的方式通过卡密和 Session 确认账号,适合想保留历史记录、工作资料和日常使用习惯的人。

    未分类 2026 年 6 月 11 日
    24200
  • datagrip破解方案更新+激活码自动激活

    重要提示:本文所涉及的DataGrip破解补丁及激活码均来源于网络收集,仅限个人学习研究使用,严禁用于商业用途。如有侵犯权益,请联系作者删除。条件允许的情况下,强烈建议购买官方正版授权! 话不多说,先展示DataGrip 2025.2.1版本破解成功的界面截图,如下图所示,可以看到授权有效期已成功延长至2099年,效果非常理想! 接下来将通过图文详解的方式,…

    DataGrip激活码 2026 年 2 月 26 日
    51200
  • Java MyBatis 面试题

    谈谈MyBatis的启动过程? 加载配置文件: MyBatis的配置文件是一个XML文件,包含了数据库连接信息、映射文件的位置等配置信息。在启动过程中,MyBatis会读取并解析这个配置文件。 创建SqlSessionFactory对象: SqlSessionFactory是MyBatis的核心对象,用于创建SqlSession对象。在启动过程中,MyBat…

    未分类 2025 年 1 月 14 日
    65800
  • 2024 IDEA最新激活码,IDEA永久免费激活码2024-12-29 更新

    IDEA 2024最新激活码 以下是最新的IDEA激活码,更新时间:2024-12-29 🔑 激活码使用说明 1️⃣ 复制下方激活码 2️⃣ 打开 IDEA 软件 3️⃣ 在菜单栏中选择 Help -> Register 4️⃣ 选择 Activation Code 5️⃣ 粘贴激活码,点击 Activate ⚠️ 必看!必看! 🔥 获取最新激活码: 实时更…

    2024 年 12 月 29 日
    71100

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信