基于for循环的字符串替换代码未完成处理流程,如何修复使其正常运行?
代码提前停止运行的原因
你的循环终止条件依赖动态变化的ans长度,核心问题如下:
- 循环初始化时的终止判断规则是
i < ans.length,但循环内部你一直在修改ans的取值,多次替换操作会不断缩短ans的总长度,当ans.length缩小到小于等于当前的i值时,循环就会直接终止,无法跑完初始预期的遍历次数。 - 额外补充:你使用的字符串
replace方法传入普通字符串作为匹配规则时,每次只会替换第一个命中的匹配项,就算循环能正常跑完,也需要执行非常多次才能覆盖所有匹配位置,运行效率极低。
修复方案
你的需求本质是把所有连续的空白字符统一替换为单个+,不需要写for循环,直接使用全局正则匹配即可一步完成处理:
ans = ans.replace(/\s+/g, '+');
参数说明:
\s匹配任意空白字符(包含普通空格、制表符等)+匹配1个或多个前面的规则,也就是连续的空白字符g代表全局匹配,会替换字符串中所有符合规则的片段,而非仅替换第一个命中项
如果你的需求里只需要处理普通空格,不需要覆盖其他空白字符,可以把正则改成/ +/g即可。
内容的提问来源于stack exchange,提问作者CeeBee
相关产品推荐
相关产品推荐

