2013-04-12 19 views
8

Ich muss wissen, ob C# hat eine Funktion gleich sql Funktion stuff, die die Eingabe-String in die ursprüngliche Zeichenfolge basierend auf dem Start und Länge gegeben ersetzen.Stuff Funktion Implementierung in C#

Herausgegeben für das Hinzufügen Beispiel:

select stuff('sad',1,1'b') 

select stuff(original string, start point, length,input string) 

der Ausgang "bad".

+2

nicht klar, was Sie verlangen * genau *. Bitte geben Sie mindestens einen Pseudocode an. – Tigran

+0

@ Tigran er spricht über http://msdn.microsoft.com/en-gb/library/ms188043.aspx – Yahya

+5

Gewählt, um wieder zu öffnen, da die Frage jetzt aufgeräumt und ausreichend klar war. – Thorarin

Antwort

6

Verwenden String.Insert() Funktion sowohl mit String.Remove() Funktion

"abc".Remove(1, 1).Insert(2, "XYZ") // result "aXYZc" 
+0

OP spricht über msdn.microsoft.com/en-gb/library/ms188043.aspx. String Insert funktioniert hier nicht. – Yahya

+0

@Yahya Es ist nicht String.Replace - es ist String.Insert, es tut genau das gleiche, was Sql STUFF tut – Alex

+1

Stuff nimmt einen anderen Parameter, um die Anzahl der Zeichen zu ersetzen, während Einfügen nicht – Yahya

1

Sie könnten eine Verlängerung Methode sein würde, dass verbindet string.replace und string.insert

public static string Stuff(this string str, int start , int length , string replaceWith_expression) 
{ 
    return str.Remove(start, length).Insert(start, replaceWith_expression); 
} 
+0

Für die Effizienz würde ich vermeiden, ein Zwischen-String-Ergebnis mit 'String.Remove' zu ​​erstellen, wie ich es in meiner Antwort getan habe. – Thorarin

6

Es gibt keine integrierte Methode, dies zu tun, aber man konnte eine Erweiterungsmethode schreiben:

static class StringExtensions 
{ 
    public static string Splice(this string str, int start, int length, 
           string replacement) 
    { 
     return str.Substring(0, start) + 
       replacement + 
       str.Substring(start + length); 
    } 

} 

Die Nutzung ist als solche:

string sad = "sad"; 
string bad = sad.Splice(0, 1, "b"); 

Beachten Sie, dass das erste Zeichen in Eine Zeichenfolge in C# ist die Nummer 0, nicht 1 wie in Ihrem SQL-Beispiel.

Wenn Sie möchten, können Sie natürlich die Methode Stuff aufrufen, aber wohl der Name Splice ist ein wenig klarer (obwohl es auch nicht oft verwendet wird).

0

Es gibt keine solche Funktion in C#, aber Sie können es einfach schreiben. Beachten Sie, dass meine Implementierung basiert auf Null (erstes Zeichen hat den Index 0):

string input = "abcdefg"; 
int start = 2; 
int length = 3; 
string replaceWith = "ijklmn"; 
string stuffedString = input.Remove(start, length).Insert(start, replaceWith); 
// will return abijklmnfg 

Sie könnten auch eine Erweiterungsmethode schreiben, die es einfacher zu verwenden, um die Funktion macht:

public static class StringExtensions 
{ 
    public static string Stuff(this string input, int start, int length, string replaceWith) 
    { 
     return input.Remove(start, length).Insert(start, replaceWith); 
    } 
} 

Verbrauch:

string stuffed = "abcdefg".Stuff(2, 3, "ijklmn");