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

相关推荐

  • WebStorm破解后是否可以切换JetBrains账号?

    申明:本教程 WebStorm破解补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 ! 废话不多说,先上 WebStorm 2025.2.1 版本破解成功的截图,如下图,可以看到已经成功破解到 2099 年辣,舒服的很! 接下来就给大家通过图文的方式分享一下如何破解最新的WebStorm。 如果觉得…

    2025 年 9 月 24 日
    21300
  • MySQL视图的深度解析

    文章标题: MySQL视图的全面剖析 文章内容: 个人空间:♡爱幻想的人 欢迎 👍点赞 ➕关注 ❤️收藏 💬留言 目录 🌟 一、视图的基本概念 ✨1.概念 ✨2.特点 🌟 二、视图的操作方法 ✨1.视图的创建 语法 示例 ✨2.视图的查看 语法 示例 ✨3.视图的查询 语法 示例 ✨4.视图数据的新增 语法 示例 ✨5.视图的修改 语法 示例 ✨6.视图的删…

    2025 年 8 月 6 日
    23700
  • 最新pycharm激活码免费版配合破解教程

    声明:以下教程中提到的 PyCharm 破解补丁与激活码均来源于互联网,仅供个人学习研究,禁止商业用途。若出现侵权,请立即联系作者删除。条件允许时,请优先购买官方正版! 先放一张 PyCharm 2025.2.1 成功激活到 2099 年的截图镇楼,看着就安心! 下面用图文方式手把手演示最新版 PyCharm 的完整激活流程。 嫌折腾?直接入手官方正版,全家…

    PyCharm激活码 2025 年 11 月 24 日
    6900
  • 2025.3idea激活支持插件

    IntelliJ IDEA 永久激活破解教程:2025最新版破解补丁与激活码获取指南 重要声明:本文涉及的 IntelliJ IDEA 破解补丁及激活码资源均来源于网络收集,严禁用于商业用途,仅限个人学习研究使用。如内容存在侵权问题,请联系本人删除。经济条件允许的情况下,强烈建议支持正版软件! IntelliJ IDEA 是 JetBrains 公司打造的一…

    IDEA破解教程 2026 年 2 月 3 日
    7200
  • 『玩转Streamlit』–查看K线的小工具

    在金融市场分析中,查看不同交易对的 K 线数据是一项基础且重要的工作。 今天,我们就来学习如何使用 Streamlit 构建一个简单的 K 线查看小工具,让你能够方便地查看不同交易对在不同时间范围内的 K 线数据。 1. 环境准备 首先,确保已经安装了必要的库。 除了 Streamlit 用于构建界面,还需要pandas 用于数据处理,plotly 用于绘制…

    2025 年 1 月 14 日
    52000

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信