JS字符串处理问题:首尾为'a'的单词替换及顺序问题求解
优化首尾为'a'的单词中间字符替换方案
需求说明
给定一个字符串,将每个首尾均为'a'的单词中,首字母与尾字母之间的所有字符替换为'!'。
示例:
aza asssa axxxa rrra -> a!a a!!!a a!!!a rrra
原有方案的问题
现有代码将符合替换条件和不符合条件的单词分别存入new__words和words__static两个数组,当输入字符串中两种单词交替出现时(如aza asssa rrra axxxa),合并数组会打乱原有单词顺序,无法得到正确结果。此外原有代码逻辑冗余,比如通过递归获取空格索引的方式过于复杂,且存在未生效的代码(new__words.map(i => "a" + i + "a")未保存处理结果)。
优化解决方案
可以通过分割-映射-拼接的极简流程实现,既能保证单词顺序不变,又大幅简化代码逻辑:
const inputStr = "aza asssa rrra axxxa"; // 按空格拆分单词,逐个处理后重新拼接 const result = inputStr.split(' ').map(word => { // 过滤掉单个'a'的情况,仅处理首尾为'a'且长度≥2的单词 if (word.length >= 2 && word[0] === 'a' && word.at(-1) === 'a') { // 保留首尾'a',中间生成对应数量的'!' return 'a' + '!'.repeat(word.length - 2) + 'a'; } // 不符合条件的单词直接返回 return word; }).join(' '); console.log(result); // 输出:a!a a!!!a rrra a!!!a
代码逻辑说明
split(' '):将输入字符串按空格拆分为单词数组,严格保留原有单词顺序map():遍历每个单词做针对性处理:- 先判断单词长度≥2(避免单个'a'被误处理),且首尾字符均为'a'
- 用
'!'.repeat(word.length - 2)生成与中间字符数量一致的感叹号,拼接首尾的'a'
join(' '):将处理后的单词数组重新拼接为字符串,保持原有空格分隔格式
内容的提问来源于stack exchange,提问作者Aintripin
相关产品推荐
相关产品推荐

