如何用循环将字符串中的标点符号替换为双感叹号
发布时间 - 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 】
相关推荐:
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel怎么在Controller之外的地方验证数据
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
北京的网站制作公司有哪些,哪个视频网站最好?
Android滚轮选择时间控件使用详解
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何用PHP快速搭建CMS系统?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel如何自定义错误页面(404, 500)?(代码示例)
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在云主机上快速搭建多站点网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
jQuery中的100个技巧汇总
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Android仿QQ列表左滑删除操作
Laravel模型事件有哪些_Laravel Model Event生命周期详解
详解阿里云nginx服务器多站点的配置
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
音乐网站服务器如何优化API响应速度?
焦点电影公司作品,电影焦点结局是什么?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
,怎么在广州志愿者网站注册?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何使用.env文件管理环境变量?(最佳实践)
使用spring连接及操作mongodb3.0实例
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel如何记录自定义日志?(Log频道配置)
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何快速搭建高效可靠的建站解决方案?
Laravel如何实现API速率限制?(Rate Limiting教程)
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
iOS正则表达式验证手机号、邮箱、身份证号等
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
nginx修改上传文件大小限制的方法
米侠浏览器网页背景异常怎么办 米侠显示修复


