js版本替换字符串空格的几种方法

本文介绍了JavaScript中替换字符串空格的几种方法,包括简单版和更高效的实现。在源字符串上修改时,需要避免频繁的字符移动,可以通过预先计算空格数量来优化,达到只移动字符串一次的效果。然而,JavaScript中字符串是不可变的,不能直接像数组那样修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 简单版
function replaceSpace(str)
{
  let a= str.replace(/\s/g,'%20')
  return a
}
  1. 简单版2
function replaceSpace(str)
{
  let a= str.split(" ")
  let b= a.join('%20')
  return b
}

3.如果明确要求只能在源字符串上做替换,那么以上两种方法均不合格。在源字符串上修改,则要求遍历字符串,直接的思路是遍历到空格,就先把后面的字符串往后移动2位,然后写入'%20'
但是这样每个字符最少需要移动1次(在一个空格的前提下),时间复杂度为O(n²)

更加完美的做法是先计算字符串的空格的数量,得到替换后的字符串长度,然后提前预留空间,从后往前遍历,所有字符串只移动一次。

虽然道理是这个道理,虽然我们知道我们可以像数组一样的通过下标访问某个字符串元素,但是却不能像数组那样进行字符串的修改(数组可以动态扩容)。所以假定源字符串为数组['w', 'e', ' ', 'a', 'r', 'e', ' ', 'h', 'a', 'p', 'p', 'y']

var str = ['w', 'e', ' ', 'a', 'r', 'e', ' ', 'h', 'a', 'p', 'p', 'y']
function replaceSpace(str) {
  let spaceNum = 0
  let start, end
  for (let i = 0; i < str.length; i++) {
    if (str[i] === ' ') {
      spaceNum++
    }
  }
  start = str.length - 1
  end = str.length + 2 * spaceNum - 1
  for (let i = str.length - 1; i >= 0; i--) {
    if (str[start] != ' ') {
      str[end] = str[start]
      end--
    } else {
      str[end] = '0'
      str[end - 1] = '2'
      str[end - 2] = '%'
      end = end - 3
    }
    start--
  }
  return str
}
console.log(replaceSpace(str))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值