如何用循环将字符串中的标点符号替换为双感叹号
发布时间 - 2026-02-03 00:00:00 点击率:次本文详解如何使用 for 循环安全、高效地将输入文本中的英文句号(.)和感叹号(!)统一替换为两个感叹号(!!),指出原始代码因边遍历边修改字符串导致的逻辑错误,并提供基于 stringbuilder 的正确实现及正则替代方案。
原始代码的核心问题在于:在 for 循环中直接修改正在遍历的字符串 text,会导致索引错位与逻辑失控。由于 Java 中 String 是不可变对象,每次执行 text = front + "!!" + back 都会创建新字符串,而循环变量 i 仍按原字符串长度递增——但此时 text 已变长,后续字符位置偏移,且 i+1 可能越界(如末尾字符被替换后,substring(i+1) 抛出 StringIndexOutOfBoundsException),最终程序可能异常终止或输出为空。
✅ 正确做法是:分离“读取”与“构建”过程——遍历原字符串只读取字符,用可变容器(如 StringBuilder)累积结果。以下是符合题目要求(必须使用 for 循环)的推荐实现:
public static String replace(String text) {
StringBuilder sb = new StringBuilder(text.length()); // 预分配容量,提升性能
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c == '.' || c == '!') {
sb.append("!!");
} else {
sb.append(c);
}
}
return sb.toString();
}? 关键改进说明:
- 使用 charAt(i) 替代 substring(i, i+1):更高效(避免新建子字符串对象),语义更清晰;
- StringBuilder 提供 O(1) 的追加操作,避免频繁字符串拼接带来的性能损耗;
- 循环全程不修改原字符串,索引 i 始终准确对应当前字符位置。
⚠️ 注意事项:
- 若输入为空字符串(""),该方法仍安全返回空字符串;
- 仅匹配 ASCII 中的
. 和 !;如需支持 Unicode 标点,需扩展判断逻辑;
- 题目强制要求 for 循环,故未采用 replaceAll("[.!]", "!!") 等简洁写法——虽一行可解,但不符合约束条件。
? 总结:字符串处理中,“遍历即修改”是典型反模式。牢记「只读原数据,另建新结果」原则,配合 StringBuilder,即可写出健壮、高效且符合教学要求的循环替换逻辑。
# java
# app
# String
# for
# 字符串
# 循环
# 对象
# ASCII
# 遍历
# 为空
# 英文
# 如需
# 但不
# 如何使用
# 抛出
# 建新
# 按原
# 更清晰
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何配置和使用缓存?(Redis代码示例)
Swift中循环语句中的转移语句 break 和 continue
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何使用Blade模板引擎?(完整语法和示例)
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
使用spring连接及操作mongodb3.0实例
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
公司门户网站制作流程,华为官网怎么做?
如何在宝塔面板中修改默认建站目录?
魔方云NAT建站如何实现端口转发?
如何用VPS主机快速搭建个人网站?
如何在IIS中配置站点IP、端口及主机头?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Python文件流缓冲机制_IO性能解析【教程】
Laravel观察者模式如何使用_Laravel Model Observer配置
油猴 教程,油猴搜脚本为什么会网页无法显示?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
java中使用zxing批量生成二维码立牌
海南网站制作公司有哪些,海口网是哪家的?
如何用美橙互联一键搭建多站合一网站?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Laravel怎么调用外部API_Laravel Http Client客户端使用
如何在万网ECS上快速搭建专属网站?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel如何为API生成Swagger或OpenAPI文档
android nfc常用标签读取总结
如何快速重置建站主机并恢复默认配置?
如何在云服务器上快速搭建个人网站?
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
JavaScript实现Fly Bird小游戏
Swift中switch语句区间和元组模式匹配
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
高端企业智能建站程序:SEO优化与响应式模板定制开发
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
iOS UIView常见属性方法小结
Java垃圾回收器的方法和原理总结
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Python自动化办公教程_ExcelWordPDF批量处理案例
黑客如何通过漏洞一步步攻陷网站服务器?
Android自定义listview布局实现上拉加载下拉刷新功能
如何用wdcp快速搭建高效网站?
如何快速搭建高效服务器建站系统?
在线教育网站制作平台,山西立德教育官网?
javascript中闭包概念与用法深入理解
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程


