2009-03-12 9 views
3

Ich habe ein Programm, das eine Zeichenfolge von einer Methode abruft. Ich möchte wissen, wie Sie einen String-Wert an bestimmten Positionen in diese Zeichenfolge einfügen.Wie füge ich einen Wert in eine Zeichenfolge an bestimmten Positionen C#

Zum Beispiel:

mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')"; 

Hier wie würde ich den String-Wert einfügen „und“ nach jedem Auftreten des Zeichens ‚)‘ in mystring?

PS. Wenn möglich, schließe auch ein, wie man es nicht direkt am Ende einfügt.

+0

Meinst du wirklich: mystring = "column1 in ('a', 'b') column2 in ('c', 'd') column3 in ('e', 'f')"? – Kev

+0

Bitte informieren Sie sich über SQL-Injektion. Bitte. –

+0

Ich weiß über SQL-Injektion. Hier, ich bekomme Daten von Listboxen, so gibt es nicht wirklich eine Chance auf SQL-Injektion ... richtig? – zohair

Antwort

2

Sie diese ersetzen mit bewerkstelligen könnte ..

string mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')"; 
mystring = mystring.Replace(")", ") and ").TrimEnd(" and".ToCharArray()); 

In Resultierende:

"column1 in('a','b') and column2 in('c','d') and column3 in('e','f')" 
+0

sei vorsichtig mit TrimEnd(), ich trenne ANY '', 'a', 'n' oder 'd' am Ende, nicht nur " und". – Lucas

+0

Ja, ich hätte erwähnen sollen, dass es für den Fall in der Frage funktioniert, aber es könnte unbeabsichtigte Nebenwirkungen geben, wenn das Ende der Zeichenfolge eines der Zeichen im trimend enthält, die nicht entfernt werden sollen. –

2

Zeichenketten sind unveränderlich, daher können Sie den Wert dieser Zeichenkette nicht "ändern". Jede Änderung, die Sie an einer Zeichenfolge vornehmen möchten, führt zu einer neuen Instanz einer Zeichenfolge. vielleicht

Dies ist, wie Sie konnte erreichen, was Sie wollen:

string s = " x in (a, b) y in (c, d) z in (e , f)"; 

string[] parts = s.Split (')'); 

StringBuilder result = new StringBuilder(); 

foreach(string part in parts) 
{ 
    result.Append (part + ") and "); 
} 
Console.WriteLine (result.ToString()); 

Aber vielleicht gibt es bessere Lösungen ...

Wie auch immer, wie kommt erhalten Sie die Zeichenfolge (die wie ein Teil sieht aus eine Where-Klausel einer SQL-Anweisung) auf diese Weise?

5

wahrscheinlich einfachste:

mystring = mystring.Replace(")", ") and "); 
mystring = mystring.Substring(0, mystring.Length - " and ".Length); 
+0

Dass ich nicht daran gedacht habe ... 8) 7 –

2

Wenn Sie meinen, und ich nehme Ihre Schnur buchstäblich und wie es kommt:

mystring = "column1 in('a','b')column2 in('c','d')column3 in('e','f')" 

Dann könnten Sie gerade tun:

mystring = 
    "column1 in('a','b') and column2 in('c','d') and column3 in('e','f')" 

Sie nicht wollen, einen nachgestellten Dies wird vorausgesetzt "und":

mystring = mystring.Replace(")c", ") and c"); 

, die in Folge hätte.

0
System.Text.RegularExpressions.Regex.Replace(
    mystring, "\\)(?=.+$)", ") and "); 

.+$ Der Teil des regulären Ausdrucks stellt sicher, dass die schließende Klammer nicht am Ende der Zeile ist. Wenn Sie dies häufig tun, würde ich empfehlen, ein Regex Objekt für das Muster zu erstellen und beizubehalten.

// Do this once somewhere: 
System.Text.RegularExpressions.Regex insertAndPattern = 
    new System.Text.RegularExpressions.Regex("\\)(?=.+$)"); 

// And later: 
insertAndPattern.Replace(mystring, ") and "); 

EDIT: Nur realisiert, ich bin ein Idiot. Die obigen Muster wurden von "\\).+$" zu "\\)(?=.+$)" korrigiert, so dass der .+$ Teil nicht im Match enthalten ist (und dadurch ersetzt wird).

+0

Sorry ... Ich habe keine Ahnung, was Regex ist und was es tut ... – zohair

+0

Also, weil Sie nicht wissen, was Regex ist - Sie werden nur seinen Kommentar abschreiben? Beeindruckend. – IEnumerator

Verwandte Themen