Ich habe eine Zeichenkette, sagen wir mal Hello world
und ich muss das Zeichen bei Index 3 ersetzen. Wie kann ich ein Zeichen durch Angabe eines Indexes ersetzen?
var str = "hello world";
Ich brauche etwas wie
str.replaceAt(0,"h");
Ich habe eine Zeichenkette, sagen wir mal Hello world
und ich muss das Zeichen bei Index 3 ersetzen. Wie kann ich ein Zeichen durch Angabe eines Indexes ersetzen?
var str = "hello world";
Ich brauche etwas wie
str.replaceAt(0,"h");
In JavaScript sind Zeichenketten unveränderlich Das heißt, das Beste, was Sie tun können, ist eine neue Zeichenkette mit dem geänderten Inhalt zu erstellen und die Variable so zuzuweisen, dass sie darauf verweist.
Sie müssen die replaceAt()
Funktion selbst:
String.prototype.replaceAt = function(index, replacement) {
return this.substring(0, index) + replacement + this.substring(index + replacement.length);
}
Und verwenden Sie es so:
var hello = "Hello World";
alert(hello.replaceAt(2, "!!")); // He!!o World
Es gibt keine replaceAt
Funktion in JavaScript. Sie können den folgenden Code verwenden, um ein beliebiges Zeichen in einer beliebigen Zeichenfolge an einer bestimmten Position zu ersetzen:
function rep() {
var str = 'Hello World';
str = setCharAt(str,4,'a');
alert(str);
}
function setCharAt(str,index,chr) {
if(index > str.length-1) return str;
return str.substring(0,index) + chr + str.substring(index+1);
}
<button onclick="rep();">click</button>
Hier gibt es viele Antworten, die alle auf zwei Methoden beruhen:
Ich persönlich würde diese beiden Methoden in unterschiedlichen Fällen anwenden. Lassen Sie mich das erklären.
@FabioPhms: Deine Methode war diejenige, die ich ursprünglich verwendet habe, und ich hatte Angst, dass sie bei Strings mit vielen Zeichen schlecht ist. Die Frage ist jedoch, was ist eine Menge von Zeichen? Ich habe es mit 10 "lorem ipsum"-Absätzen getestet und es dauerte ein paar Millisekunden. Dann habe ich es mit einer 10-mal größeren Zeichenkette getestet - es gab wirklich keinen großen Unterschied. Hm.
@vsync, @Cory Mawhorter: Ihre Kommentare sind eindeutig; aber noch einmal: Was ist ein großer String? Ich stimme zu, dass für 32...100kb die Leistung besser sein sollte und man sollte substring-variant für diese eine Operation der Zeichenersetzung verwenden.
Aber was passiert, wenn ich eine ganze Reihe von Ersatzbeschaffungen vornehmen muss?
Ich musste meine eigenen Tests durchführen, um zu beweisen, was in diesem Fall schneller ist. Nehmen wir an, wir haben einen Algorithmus, der eine relativ kurze Zeichenkette mit 1000 Zeichen verarbeitet. Wir gehen davon aus, dass jedes Zeichen in dieser Zeichenfolge im Durchschnitt etwa 100 Mal ersetzt wird. Der Code, um so etwas zu testen, lautet also:
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*
}
Ich habe eine Fiddle dafür erstellt, und sie lautet aquí . Es gibt zwei Tests, TEST1 (Teilstring) und TEST2 (Array-Konvertierung).
Ergebnisse:
Es scheint, dass die Array-Konvertierung die Substring-Konvertierung um 2 Größenordnungen schlägt! Also - was zum Teufel ist hier passiert???
Was tatsächlich passiert, ist, dass alle Operationen in TEST2 auf dem Array selbst ausgeführt werden, indem ein Zuweisungsausdruck wie strarr2[p] = n
. Assignment ist wirklich schnell im Vergleich zu substring auf eine große Zeichenfolge, und es ist klar, dass es zu gewinnen.
Es kommt also darauf an, das richtige Werkzeug für die jeweilige Aufgabe zu wählen. Noch einmal.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.