js中字符串的修改(string的坑)

1,129 阅读3分钟

js中字符串的修改(string的坑)

tx一面做了一道字符串的题,狠狠地掉进了一个大坑,这里做一个笔记总结一下

一. js中字符串的特点

字符串在 JavaScript 中被视为不可变(immutable)的数据类型,意味着无法直接修改字符串的特定字符

二. js中字符串修改的方法

//以下列字符串举例
var str = "This is string."

(一). 使用内置方法,不使用数组

1. 替换指定内容

1). 使用replace()方法,replace()方法不会改变原始字符串,替换第一个被找到的字符串

  • replace()+字符串替换指定内容
console.log(str.replace('Th','tH')) // => tHis is string.
  • replace()+正则替换指定内容
console.log(str.replace(/Th/,'tH')) // => tHis is string.
  • replace()+正则删除指定内容
console.log(str.replace(/i/g,'')) // => Ths s strng.

2). 使用replaceAll()方法,replaceAll()方法不会改变原始字符串,替换全部被找到的字符串

//删除字符串中的i,其他使用方法同replace()
console.log(str.replaceAll('i','')) // => Ths s strng.

2. 替换指定位置

通过substring() 或 slice() 方法+字符串拼接

c29d5b1e13b6dbde9da9f0fdb556256.png fa5a51b0663a3b50916a19268a3750a.png

/**
 * @param {string} str - 原始数组
 * @param {number} index - 替换的位置 
 * @param {number} length - 替换的内容的长度 
 * @param {string} char - 要替换的内容
 * @return {string}
 */
const replaceStr = (str, index,length, char) => {
    return str.substring(0, index) + char + str.substring(index + length);
}
const replaceStr2 = (str, index,length, char) => {
    return str.slice(0, index) + char + str.slice(index + length);
}

console.log(replaceStr(str,1,5,'AAAAA')) // => TAAAAAs string.
console.log(replaceStr2(str,3,5,'BBBBB')) // => ThiBBBBBstring.

(二). 转化为字符数组

1.使用split()方法把一个字符串分割成字符串数组,对字符串数组进行操作后,再使用数组的join()方法把字符串数组转为字符串

  • 使用字符串(string类型)中的.split()方法将字符串转化为字符串数组(Array类型)
    注意split()方法不改变原始字符串,需要赋值到一个新变量上
arr = str.split('')
console.log(arr)  // =>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
  • 对字符数组进行操作
//eg
arr[arr.length-1] = '!' 
  • 使用数组(Array类型)中的.join()方法将字符串数组转化为字符串(string类型)
    注意join()方法不改变原始字符串,需要赋值到一个新变量上
new_str = arr.join('')
console.log(new_str)  // => This is string!

2.创建一个字符串数组保存字符串,通过遍历字符串给字符串数组赋值,使用字符串拼接将字符数组转为字符串(也可以用join()方法,只是与上面提到过,不详细叙述)

1). 使用Array构造函数构造数组
const arr = new Array(str.length).fill('')//创建字符数组,fill()方法是初始化为string类型,不然数组的元素类型为undifined
arr.forEach((value,i)=>{
    arr[i] = str[i]
})
console.log(arr) // =>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
2). 使用数组字面量构造数组
const arr = [] 
for(let i = 0 ; i < str.length ; i++){
    arr[i] = str[i]
}
console.log(arr) // =>['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 't', 'r', 'i', 'n', 'g', '.']
//这里就无法使用forEach循环赋值了,因为数组一开始为空的,元素个数为0,这里用了两种循环也是一种区别
使用字符串拼接将数组还原为字符串
var answer = ""
for(const value of arr){
    answer  += value
}
console.log(answer) // =>This is string.

题目

最后,做做题来检验检验吧
6. N 字形变换 - 力扣(LeetCode)
151. 反转字符串中的单词 - 力扣(LeetCode)
831. 隐藏个人信息 - 力扣(LeetCode)

参考资料

JavaScript String 对象 | 菜鸟教程 (runoob.com)
String.prototype.split() - JavaScript | MDN (mozilla.org)
javascript - js替换字符串中指定位置的字符 - 秦老爷子 - SegmentFault 思否
JavaScript删除字符串中指定字符的四种方法_字符串删除指定字符-CSDN博客