You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何交换字符串的字符位置——解密函数开发卡点求助

解决字符串第二个与最后一个字母交换的问题

我看你在解密函数里的字符串交换环节卡壳了,咱们来一步步搞定这个问题!

首先,你的思路是对的——用substring确实比replace更适合这个场景,但原代码里的substring(2,3)有个关键问题:它只能获取单个字符(索引2的位置),如果单词长度超过4,中间的其他字符就会被漏掉。比如你举的"Hello"例子,原代码处理后会丢失第二个"l",得不到预期的"Holle"。

修正后的代码

咱们调整交换逻辑,确保中间所有字符都被保留,同时加上边界情况的处理:

function decipher(str) { 
  let s = "" 
  for (let word of str.split(" ")){ 
    // 提取数字并转换为对应ASCII字符
    let dig = word.match(/\d+/)[0] 
    word = word.replace(dig, String.fromCharCode(dig)) 

    // 处理短单词的边界情况:长度≤2时无需交换
    if (word.length <= 2) {
      s += word + " "
      continue
    }

    let secondLetter = word[1] 
    let lastLetter = word[word.length - 1] 
    // 拼接规则:首字符 + 最后一个字符 + 中间全部字符(索引2到倒数第二个) + 第二个字符
    let swapped = word[0] + lastLetter + word.substring(2, word.length - 1) + secondLetter 
    s += swapped + " " 
  }
  // 去除循环拼接时产生的末尾多余空格
  return s.trim() 
};

关键逻辑说明

  1. 边界处理:增加了单词长度≤2的判断,避免索引越界,同时短单词也不需要交换操作;
  2. 正确截取中间字符:word.substring(2, word.length - 1)会获取从索引2开始,到倒数第二个字符结束的所有内容,确保中间的字符一个都不会丢;
  3. 优化返回结果:用trim()去掉末尾多余的空格,让输出更整洁。

测试你的例子

当处理"Hello"时:

  • word[0] = "H"
  • lastLetter = "o"
  • word.substring(2,4) = "ll"
  • secondLetter = "e"
  • 拼接后得到:H + o + ll + e = "Holle",完全符合你的预期!

内容的提问来源于stack exchange,提问作者tarik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:44:07