“这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战”
题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路 1.正则表达式替换所有空格 2.开辟新的字符串用于替换所有空格 3.通过双指针替换 4.js字符串splice方法替换 手首先要明确两个问题: 问题1:替换字符串,是在原来的字符串上做替换,而不是新开辟一个字符串做替换! 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下,从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。 填充后的形式:
1.正则表达式替换所有空格
// 1.正则
function replaceSpace(str)
{
return str.replace(/\s/g, "%20");
}
2.开辟新的字符串用于替换所有空格
function find(str) {
var res='';
for(i=0; i<str.length; i++) {
if(str[i] == ' ') {
res = res+'%20'
} else {
res = res + str[i]
}
}
console.log(res)
}
var res1 = 'we are happy';
find(res1)
3.通过双指针替换
function find(str) {
if(str == '' || str.length == 0) {
return 0
}
var emptyLen = 0;
//空格数量
for(let i=0 ; i<str.length; i++ ) {
if(str[i] == ' ') {
++emptyLen
}
}
var length = str.length + emptyLen*2;
var chs = new Array(length);
//两个指针一个指向原数组下标(j),一个指向新数组下标(i)
for(let i = 0, j = 0; j<str.length; j++,i++) {
if(str[j] == ' ') {
chs[i++] = '%';
chs[i++] = '2';
chs[i++] = '0';
} else {
chs[i] = str[j];
}
}
console.log(chs)
}
var res1 = 'we are happy';
find(res1)
4.js字符串splice方法替换
function find(str) {
str = str.split("")
console.log(str.length)
//将字符串分割为字符串数组(splice是对数组进行操作的)
for(var i=0; i<str.length; i++) {
if(str[i] == ' ') {
str.splice(i,1,'%20')
}
}
// str = str.join('')
console.log(str)
}
var res1 = 'we are happy';
find(res1)
如有错误欢迎指出