我有一个字符串,比如Hello world我需要替换索引3处的char。如何通过指定索引替换字符?
var str = "hello world";
我需要这样的东西
str.replaceAt(0,"h");
我有一个字符串,比如Hello world我需要替换索引3处的char。如何通过指定索引替换字符?
var str = "hello world";
我需要这样的东西
str.replaceAt(0,"h");
当前回答
这里的方法很复杂。 我会这样做:
var myString = "this is my string";
myString = myString.replace(myString.charAt(number goes here), "insert replacement here");
这很简单。
其他回答
这里有很多答案,它们都基于两种方法:
METHOD1:使用两个子字符串分割字符串,并在它们之间填充字符 将字符串转换为字符数组,替换一个数组成员并加入它
就我个人而言,我会在不同的情况下使用这两种方法。让我解释一下。
@FabioPhms:你的方法是我最初使用的方法,我担心它对有很多字符的字符串不好。然而,问题是什么是很多角色?我测试了10个“lorem ipsum”段落,只花了几毫秒。然后我在10倍大的弦上测试了它——真的没有太大的区别。嗯。
@vsync, @科里·马沃特:你的评论很明确;但是,什么是大字符串呢?我同意对于32…100kb的性能应该更好,应该使用substring-variant来进行字符替换操作。
但如果我不得不做很多替换怎么办?
我需要执行自己的测试,以证明在这种情况下什么更快。假设我们有一个算法,可以操作一个由1000个字符组成的相对较短的字符串。我们期望该字符串中的每个字符平均将被替换约100次。所以,测试这样东西的代码是:
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
我为此做了一把小提琴,就在这里。 有两个测试,TEST1(子字符串)和TEST2(数组转换)。
结果:
TEST1: 195毫秒 女士TEST2: 6
似乎数组转换比子字符串强2个数量级!那么,这里到底发生了什么??
实际上发生的是TEST2中的所有操作都是在数组本身上完成的,使用strarr2[p] = n这样的赋值表达式。与大字符串上的substring相比,赋值非常快,而且很明显它会赢。
所以,关键是要为工作选择合适的工具。一次。
使用扩展语法,你可以将字符串转换为数组,在给定位置分配字符,然后转换回字符串:
Const STR = "hello world"; 函数replace (s, i, c) { Const arr =[…s];//将字符串转换为数组 Arr [i] = c;//在pos i处设置字符c 返回arr.join(”);//返回字符串 } //打印"hallo world" console.log(replace (str, 1, 'a'));
var str = “hello world”; console.log(str); var arr = [...p]; arr[0] = “H”; p = arr.join(“”); console.log(str);
下面是我想出的一个版本,如果你想在react/javascript的索引中设置单词或单个字符的样式。
replaceAt( yourArrayOfIndexes, yourString/orArrayOfStrings )
工作示例:https://codesandbox.io/s/ov7zxp9mjq
function replaceAt(indexArray, [...string]) {
const replaceValue = i => string[i] = <b>{string[i]}</b>;
indexArray.forEach(replaceValue);
return string;
}
这是另一种方法
function replaceAt(indexArray, [...string]) {
const startTag = '<b>';
const endTag = '</b>';
const tagLetter = i => string.splice(i, 1, startTag + string[i] + endTag);
indexArray.forEach(tagLetter);
return string.join('');
}
和另一个……
function replaceAt(indexArray, [...string]) {
for (let i = 0; i < indexArray.length; i++) {
string = Object.assign(string, {
[indexArray[i]]: <b>{string[indexArray[i]]}</b>
});
}
return string;
}
在JavaScript中,字符串是不可变的,这意味着您所能做的最好的事情就是用更改后的内容创建一个新的字符串,并将变量赋值指向它。
你需要自己定义replace()函数:
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + replacement.length);
}
像这样使用它:
var hello = "Hello World";
alert(hello.replaceAt(2, "!!")); // He!!o World