字符串空格替换为 “%20” 的两种实现方法
目录
字符串空格替换为 “%20” 的两种实现方法
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
一、题目要求
二、使用 StringBuilder 的方法
三、使用字符数组的方法
四、总结
在 Ja va 开发中,处理字符串是家常便饭。一个常见的需求就是将字符串里的空格替换成特定字符,比如在构造 URL 时,把空格编码成 “%20”。今天,我们就来深入聊聊实现这个功能的两种主流方法,看看它们各自的门道和适用场景。
一、题目要求
问题很明确:给你一个由大小写英文字母组成的字符串,已知其真实长度(包括后面预留的可使用空间),任务是把字符串中所有的空格都替换成 “%20”。
二、使用 StringBuilder 的方法
思路分析
但凡对 Ja va 字符串特性有所了解的朋友都知道,String 对象是不可变的。这意味着每次看似“修改”字符串,实际上都在创建新对象,这在频繁操作的场景下效率堪忧。那怎么办呢?这时候,可变字符序列 StringBuilder 就该登场了。它的设计初衷就是为了高效地进行字符串拼接、删除和替换。我们的思路也就很直接了:遍历原字符串,遇到空格,就用 “%20” 替换掉它,最后把 StringBuilder 转回 String 即可。
Ja va 代码实现
public class ReplaceSpace {
public static String replaceSpace(StringBuilder str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
str.replace(i, i + 1, "%20");
}
}
return str.toString();
}
public static void main(String[] args) {
StringBuilder str = new StringBuilder("mr john smith");
System.out.println(replaceSpace(str));
}
}
三、使用字符数组的方法
思路分析
如果说 StringBuilder 是“优雅派”,那字符数组方法就是“实力派”,追求极致的性能控制。它的核心思想是“先算后做”。首先,统计出原字符串里有多少个空格。要知道,一个空格替换成 “%20” 会多出两个字符,所以替换后的新长度就是原长度加上空格数的两倍。接下来,准备两个指针,一个(快指针)从原字符串末尾向前扫描,另一个(慢指针)在新字符数组的末尾准备填充。当快指针碰到非空格字符,就直接复制到慢指针位置;如果碰到空格,就从后往前依次填入 ‘0’、‘2’、‘%’。这种方法巧妙地避免了大量数据的整体移动。
Ja va 代码实现
public class ReplaceSpaceWithCharArray {
public static String replaceSpace(char[] str, int length) {
int spaceCount = 0;
for (int i = 0; i < length; i++) {
if (str[i] == ' ') {
spaceCount++;
}
}
int newLength = length + spaceCount * 2;
char[] newStr = new char[newLength];
int p1 = length - 1;
int p2 = newLength - 1;
while (p1 >= 0) {
if (str[p1] == ' ') {
newStr[p2--] = '0';
newStr[p2--] = '2';
newStr[p2--] = '%';
} else {
newStr[p2--] = str[p1];
}
p1--;
}
return new String(newStr);
}
public static void main(String[] args) {
char[] str = {'m', 'r',' ', 'j', 'o', 'h', 'n',' ', 's','m', 'i', 't', 'h', '\0', '\0', '\0', '\0', '\0', '\0', '\0'};
System.out.println(replaceSpace(str, 13));
}
}
四、总结
两种方法的比较
简单来说,StringBuilder 胜在简洁直观。代码一目了然,非常适合在一般业务场景下进行简单的字符串替换。当然,有人可能会担心,如果字符串极长且操作极频繁,频繁的替换操作是否会影响性能?实际上,现代 Ja va 编译器和 JVM 的优化能力已经非常强大,对于大多数应用,这种开销完全在可接受范围内。
反过来看,字符数组方法则胜在精细可控。它直接在数组上操作,避免了创建中间对象,在处理海量数据或对性能有严苛要求的场景下(例如底层算法实现、高频交易系统),优势就体现出来了。不过,代价就是代码复杂度上升,需要开发者手动管理指针和数组边界,一个不留神就容易出现越界错误。
注意事项
选择字符数组方法时,务必对指针移动和边界条件保持高度警惕。同时,深刻理解 Ja va 字符串不可变这一特性,是写出高效、高质量字符串处理代码的基础。根据实际需求,在开发效率与运行效率之间做出明智权衡,这才是关键所在。
希望通过以上的剖析,你能真正掌握这两种替换空格的“武器”,并在未来的开发工作中,根据具体情况,灵活选用最趁手的那一个。
相关攻略
目录 字符串空格替换为 “%20” 的两种实现方法 一、题目要求 二、使用 StringBuilder 的方法 三、使用字符数组的方法 四、总结 在 Ja va 开发中,处理字符串是家常便饭。一个常见的需求就是将字符串里的空格替换成特定字符,比如在构造 URL 时,把空格编码成 “%20”。今天,我
PHP进程管理与服务重启操作指南 在日常的服务器运维中,PHP-FPM进程的管理是一项基础但至关重要的任务。无论是排查问题还是应用更新,掌握如何优雅(或强制)地停止与重启PHP服务,都是运维人员的必备技能。下面,我们就来系统地梳理一下相关的命令和操作流程。 查看PHP进程 首先,我们得知道PHP-F
CTF是什么?网络安全竞赛的全面解读 对于网络安全领域之外的朋友而言,CTF可能是一个陌生的术语。简单来说,CTF(Capture The Flag,夺旗赛)是网络安全技术人员之间进行技术竞技与交流的核心形式,常被喻为安全界的“奥林匹克”或“华山论剑”。其诞生源于一个朴素的初衷:黑客们需要一种安全、
安装Ja va库的方法 想给Ja va项目装上需要的库?这事儿说简单也简单,但几个关键步骤没走对,就容易卡壳。别担心,咱们把整个过程拆开揉碎了讲,无论你用的是Windows、macOS还是Linux,照着下面这套流程走,基本都能搞定。 第一步:先摸清“家底”——确定Ja va版本 动手之前,先得搞清
前端开发语言:构建现代网页的工具箱 说起前端开发,很多人可能会立刻想到Ja vaScript,但其实构建一个现代网页,远非一种语言能够完成。它更像是一个精密协作的工具箱,每件工具都有其独特的职责和优势。今天,我们就来梳理一下这个工具箱里的核心成员。 HTML:网页的骨架 想象一下,HTML就好比是建
热门专题
热门推荐
红米Note 11 Pro系统升级,为何坚持要求连接Wi-Fi? 当红米Note 11 Pro收到MIUI或澎湃OS的系统更新推送时,官方总会明确提示:整个过程请在Wi-Fi网络环境下完成。这项要求并非随意设定,而是基于清晰的技术与体验考量。一次完整的系统升级包,其大小通常在2GB至4GB之间。如果
小米13 Ultra的NFC功能深度解析:它如何重新定义“全场景智能交互”? 在旗舰手机领域,NFC功能看似已成为标配,但体验却千差万别。小米13 Ultra所搭载的全功能NFC方案,在“全能”与“好用”两个维度上树立了新的标杆。它不仅无缝集成了公交卡模拟、门禁卡复制、数字车钥匙等核心生活服务,更全
嵌入式消毒柜电源插座安装指南:隐蔽式布局提升安全与美观 在规划嵌入式消毒柜的安装方案时,电源插座的布局方式直接影响到最终的整体效果与安全性。正确的做法是避免插座外露,采用隐蔽式安装。根据国家《住宅厨房设计规范》及主流厨电品牌的安装标准,推荐将插座预留在消毒柜后方或侧方的墙体内部,安装高度宜控制在距地
是的,魔音(Beats)耳机充电状态一目了然,指示灯明确显示 当你为Beats头戴式耳机充电时,如何判断它是否已经充满?答案就藏在机身自带的五段式LED电量指示灯里。在充电过程中,这排指示灯会持续闪烁,实时反馈充电进度。一旦所有五个指示灯全部转为稳定常亮、不再闪烁,即代表电池已完全充满。整个充电周期
博朗剃须刀型号全解析:从编码规则到选购技巧的终极指南 面对博朗剃须刀复杂的字母数字组合感到困惑?实际上,其型号命名体系逻辑严谨,是用户选购的核心依据。简单来说,型号首位的数字(1、3、5、7、9)直接代表产品系列,数字越大,通常意味着技术越先进、功能越全面、定位越高端。例如,顶级的9系旗舰机型普遍搭





