如何用循环将字符串中的标点符号替换为双感叹号

发布时间 - 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创建与使用教程