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

相关推荐

  • 基于Spring Boot的家教招聘求职系统(含源码)

    基于Spring Boot的家教招聘求职系统(含源码) springboot家教应聘招聘系统 摘 要 随着信息技术的飞速发展,家教应聘招聘系统在教育领域的应用愈发广泛,特别是借助Springboot框架开发的系统,在提升效率、保障安全性以及增强可扩展性方面展现出显著优势。本文基于Springboot技术,设计并构建了一款家教应聘招聘系统,旨在为家长与家教搭建…

    2025 年 9 月 17 日
    19500
  • IntelliJ IDEA2026年激活亲测流程

    本教程适用于IDEA、PyCharm、DataGrip、Goland等,支持Jetbrains全家桶! 废话不多说,先上最新 IDEA 版本破解成功的截图,如下,可以看到已经成功破解到 2099 年辣,舒服! 接下来,我就将通过图文的方式, 来详细讲解如何激活 IDEA至 2099 年。 当然这个激活方法,同样适用于之前的旧版本! 不管你是什么操作系统,什么…

    IDEA破解教程 2026 年 1 月 26 日
    13100
  • 聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

    目录 一、IOC容器的刷新环节快速回顾 二、postProcessBeanFactory源码展示分析 (一)模版方法postProcessBeanFactory (二)AnnotationConfigServletWebServerApplicationContext 调用父类的 postProcessBeanFactory 包扫描 注解类注册 (三)pos…

    2025 年 1 月 19 日
    64900
  • datagrip破解测试报告附激活码验证结果

    DataGrip破解教程:2025.2永久激活码+破解补丁下载(Windows/Mac/Linux) 重要提示:本教程所涉及的DataGrip破解补丁与激活码均来源于网络收集,仅限个人学习研究使用,严禁任何商业用途。若发生版权争议,请联系本站删除。条件允许的话,强烈建议购买官方正版授权! DataGrip作为JetBrains旗下强大的数据库开发工具,支持跨…

    2026 年 1 月 7 日
    21100
  • 【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

    我的个人主页我的专栏:Java-数据结构 ,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介1.2 LinkedList 的实现原理1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链表的定义与种类2.2 单链表与双链表的区别2.3 循环链表与普通链…

    2025 年 1 月 10 日
    46800

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信