我有一个字符串,比如Hello world我需要替换索引3处的char。如何通过指定索引替换字符?

var str = "hello world";

我需要这样的东西

str.replaceAt(0,"h");

当前回答

与vector打交道通常最有效的方法是接触String。

我建议使用以下函数:

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}

运行这段代码:

String.prototype.replaceAt=function(index, char) { var a = this.split(“”); a[索引] = 字符; 返回 a.join(“”); } var str = “hello world”; str = str.replaceAt(3, “#”); document.write(str);

其他回答

在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

这里有很多答案,它们都基于两种方法:

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相比,赋值非常快,而且很明显它会赢。

所以,关键是要为工作选择合适的工具。一次。

str = str.split('');
str[3] = 'h';
str = str.join('');

如果你想替换字符串中的字符,你应该创建可变字符串。这些本质上是字符数组。你可以创建一个工厂:

  function MutableString(str) {
    var result = str.split("");
    result.toString = function() {
      return this.join("");
    }
    return result;
  }

然后你可以访问字符,整个数组转换为字符串时使用的字符串:

  var x = MutableString("Hello");
  x[0] = "B"; // yes, we can alter the character
  x.push("!"); // good performance: no new string is created
  var y = "Hi, "+x; // converted to string: "Hi, Bello!"

谢谢你的回答!

我还稍微调整了它,使它更像数组。拼接方法(并考虑了@Ates的笔记):

spliceString=function(string, index, numToDelete, char) {
      return string.substr(0, index) + char + string.substr(index+numToDelete);
   }

var myString="hello world!";
spliceString(myString,myString.lastIndexOf('l'),2,'mhole'); // "hello wormhole!"