So ersetzen Teil der Zeichenfolge von der position?
Habe ich diesen string: ABCDEFGHIJ
Muss ich ersetzen von position 4 auf position 5, die mit der Zeichenfolge ZX
Wird es so Aussehen: ABCZXFGHIJ
Aber nicht zu verwenden mit string.replace("DE","ZX")
- ich brauche für die Verwendung mit position
Wie kann ich es tun?
bitte überprüfen Sie die Daten. Das ist eine ältere als die, die Sie verknüpft.
Ich in der Regel Blick auf die Qualität der Frage und der Antworten, nicht der Termin, wie gesagt, zu tun, hier. In diesem Fall habe ich anscheinend einen Fehler gemacht und klickte auf die falsche ein, um zu markieren, wie doppelte, da die Qualität der Frage ist natürlich besser, und so habe ich es markiert die andere Frage.
ah, ich wusste nicht über diese Empfehlung - danke für den Hinweis it out. (Obwohl, es ist verwirrend, um zu sehen, etwas älter gemeldet, als ein Duplikat von etwas neueren, also in diesem Fall, es wäre der Mühe Wert, explizit zu erklären, dass Sie die Kennzeichnung als Duplikat einer ÄLTEREN Frage, weil die verlinkten hat man bessere Antworten.)
Ich in der Regel Blick auf die Qualität der Frage und der Antworten, nicht der Termin, wie gesagt, zu tun, hier. In diesem Fall habe ich anscheinend einen Fehler gemacht und klickte auf die falsche ein, um zu markieren, wie doppelte, da die Qualität der Frage ist natürlich besser, und so habe ich es markiert die andere Frage.
ah, ich wusste nicht über diese Empfehlung - danke für den Hinweis it out. (Obwohl, es ist verwirrend, um zu sehen, etwas älter gemeldet, als ein Duplikat von etwas neueren, also in diesem Fall, es wäre der Mühe Wert, explizit zu erklären, dass Sie die Kennzeichnung als Duplikat einer ÄLTEREN Frage, weil die verlinkten hat man bessere Antworten.)
InformationsquelleAutor Gali | 2011-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Methode zum hinzufügen und entfernen von Bereichen in einem string zu verwenden, die
StringBuilder
.Alternative ist die Verwendung
- String.Substring
, aber ich denke, dieStringBuilder
code wird besser lesbar.Warum verwenden Sie einen StringBuilder hier? Überprüfen Sie V4Vendetta Antwort, die ist sehr viel besser lesbar...
Remove() und Insert() jeder erstellen und geben Sie einen neuen string. Die StringBuilder-Ansatz zu vermeiden, diese zusätzlichen Kosten durch die Arbeit innerhalb eines zuvor zugewiesenen Abschnitt des Speichers und verschieben von chars Runde innerhalb es.
Das stimmt, aber extra eingeführt, durch die Einführung eines StringBuilder-Objekts und durch eine Verringerung der Lesbarkeit
Was den Punkt der Verwendung von StringBuilder hier, wenn Sie sich mit dem Telefon zu Entfernen und Legen Sie die gleiche Weise wie V4Vendetta, aber er tut es direkt auf der Schnur? Scheint redundanten code.
InformationsquelleAutor Albin Sunnanbo
InformationsquelleAutor V4Vendetta
ReplaceAt(int index, int length, string ersetzen)
Hier ist eine Erweiterung-Methode nicht mit StringBuilder oder Substring. Diese Methode erlaubt auch die Ersatz-Zeichenfolge zu verlängern Vergangenheit die Länge der Quell-Zeichenfolge.
Wenn Sie diese Funktion verwenden, wenn Sie wollen, dass die gesamte Ersatz-Zeichenfolge zu ersetzen, so viele Zeichen wie möglich, dann legen Sie Länge, um die Länge der Ersatz-Zeichenkette:
Andernfalls können Sie die Anzahl der Zeichen, die entfernt werden:
Wenn Sie geben Sie die Länge 0 ist, dann ist diese Funktion verhält sich genau wie die insert-Funktion:
Ich denke, dies ist effizienter, da der StringBuilder-Klasse müssen nicht initialisiert werden, und da es verwendet grundlegende Operationen. Bitte korrigieren Sie mich, wenn ich falsch bin. 🙂
InformationsquelleAutor Nick Miller
Verwenden
String.Substring()
(details hier) geschnitten linken Teil, dann ist Ihr Ersatz, dann rechts Teil. Spielen Sie mit Indizes, bis Sie es richtig 🙂Etwas wie:
InformationsquelleAutor Daniel Mošmondor
Als Erweiterung Methode.
InformationsquelleAutor alykhalid
t
wieder zurück.InformationsquelleAutor Javed Akram
Könnten Sie versuchen, etwas zu verlinken:
InformationsquelleAutor MBU
Wie andere erwähnt haben, die
Substring()
Funktion gibt es für einen Grund:Auch ich zeitlich diese gegen die
StringBuilder
Lösung und bekam 900 tics vs. 875. So ist es leicht langsamer.InformationsquelleAutor ja72
Alle anderen Antworten nicht funktionieren, wenn der string enthält Unicode-char (wie Emojis), da ein Unicode-char Gewicht mehr bytes als char.
Mit dieses Thema, ich erweitere die StringInfo-Klasse zu Ersetzen durch die position halten der Nick Miller-Algorithmus zu vermeiden, dass :
Versuchen Sie, die unicode-Zeichen am Anfang der Zeichenfolge wie : dotnetfiddle.net/3V2K3Y. Sie sehen nur die Letzte Zeile funktioniert gut und der char auf den 4. Platz (im anderen Fall, unicode-char 2 char Länge)
Du hast Recht, es ist nicht klar. Ich aktualisiert meine Antwort hinzufügen, weitere Erklärungen, warum die anderen Antworten nicht funktionieren
InformationsquelleAutor GGO
Mit Hilfe von diesem post, ich erstelle folgende Funktion mit zusätzlicher Länge überprüft
InformationsquelleAutor Hassan
Weiteres
InformationsquelleAutor Stijn Van Antwerpen
Wenn Sie sich sorgen über die Leistung, dann die Sache, die Sie vermeiden möchten, hier sind die Zuweisungen. Und wenn Sie auf .Net Core 2.1+ (oder die, noch nicht .Net-Standard 2.1), dann kannst du, durch die Verwendung die
- string.Erstellen
Methode:Dieser Ansatz ist schwieriger zu verstehen als die alternativen, aber es ist das einzige, das zuteilen wird nur ein Objekt pro Aufruf: die neu erstellte Zeichenfolge.
InformationsquelleAutor svick
Es ist besser, verwenden Sie die
String.substr()
.Wie diese:
InformationsquelleAutor Varun_k
Ich war auf der Suche für eine Lösung mit folgenden Anforderungen:
Lösung 1
Die Lösung, die am besten zu mir passt, ist diese:
Diese verwendet
StringBuilder.Ersetzen(oldChar, newChar, position, count)
Lösung 2
Andere Lösung, erfüllt meine Anforderungen, ist die Verwendung
Substring
mit Verkettung:Dies ist auch OK. Ich denke es ist nicht so effizient wie die erste Leistung wise (durch unnötige string-Verkettung). Aber vorzeitige Optimierung ist die Wurzel allen übels.
So wählen Sie die, die Sie am meisten mögen 🙂
InformationsquelleAutor KFL
Lassen Sie mich erklären, meine Lösung.
Angesichts der Problematik der Veränderung ein string in seine zwei bestimmten position ("position 4-position 5") mit zwei Zeichen 'Z' und 'X' und die Fragen-ist die Verwendung der position index zu ändern, den string und nicht string-Replace () - Methode(kann sein, weil die Möglichkeit der Wiederholung der einige Zeichen in der aktuellen Zeichenfolge), ich würde es vorziehen, zu verwenden, minimalistischen Ansatz, um das Ziel zu erreichen über die Verwendung von
Substring()
- und string -Concat()
oder stringRemove()
undInsert()
Ansatz. Obwohl alle diese Lösungen dienen dem Zweck erreichen das gleiche Ziel, aber es hängt nur von der persönlichen Wahl und Philosophie der Abrechnung mit den minimalistischen Ansatz.Kommen wir zurück zu meiner Lösung oben erwähnt, wenn, die wir nehmen einen genaueren Blick auf
string
undStringBuilder
beide intern behandelt eine bestimmte Zeichenfolge als ein array von Zeichen. Wenn wir uns auf die Umsetzung vonStringBuilder
es wird eine interne variable, so etwas wie "internal char[] m_ChunkChars;
" aufnehmen, die die angegebene Zeichenfolge. Jetzt, da dies ist eine interne variable, die wir nicht direkt Zugriff auf die gleichen. Für die externe Welt, um in der Lage sein, zuzugreifen und zu verändern, dass die Zeichen-array,StringBuilder
entlarvt Sie durch die index-Eigenschaft, die in etwa so aussieht wie untenMeine Lösung oben erwähnten Hebelwirkung diese indexer-Fähigkeit, um direkt verändern, die intern verwaltete Zeichen-array, die IMO ist effizient und minimalistisch.
BTW; wir schreiben die obige Lösung etwas aufwändig so etwas wie unten
In diesem Zusammenhang auch erwähnen möchte, dass im Falle des
string
es auch index-Eigenschaft, als Mittel zur Bereitstellung der internen character-array, aber in diesem Fall hat nur Getter-Eigenschaft (und keine Setter) as string ist unveränderbar in der Natur. Und das ist, warum wir brauchen, um zu verwendenStringBuilder
zu ändern, der Zeichen-Arrays.Und nicht zuletzt diese Lösung ist nur die beste Lösung für dieses spezielle problem, wo die Fragen zu ersetzen, die nur wenige Zeichen mit einer bekannten position index im Voraus. Es ist vielleicht nicht die beste Passform, wenn der Anforderung ist zu ändern eine ziemlich lange Zeichenkette, d.h. die Anzahl der Zeichen zu ändern, sind groß in zahlen.
InformationsquelleAutor Asif
Ich glaube die einfachste Möglichkeit wäre diese:(ohne stringbuilder)
Dies funktioniert, da eine variable vom Typ string kann behandelt werden als ein array von char-Variablen.
Sie können zum Beispiel beziehen sich auf das zweite Zeichen in eine string-variable mit dem Namen "myString" als myString[1]
string
die Zeichen ersetzt werden, die jeweils nur einmal vorkommen. Wenn man dieses gegen, sagen wir,"DBCDEFGHIE"
dann erhalten Sie"ZBCZXFGHIX"
, was nicht das gewünschte Ergebnis. Außerdem würde ich nicht Zustimmen, dass dies einfacher ist, als die anderen nicht-StringBuilder
Lösungen die gepostet wurden zwei und ein halb Jahren.InformationsquelleAutor Sfou