Jak wstawić wartość w ciągu znaków w niektórych pozycjach C #

głosy
3

Mam program, który pobiera ciąg od metody. Chcę wiedzieć, jak wstawić ciąg znaków do tego łańcucha w pewnych pozycjach.

Na przykład:

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

Oto, w jaki sposób wstawić wartość ciągu „i” po każdym wystąpieniu charakteru „)” w mystring?

PS. Jeśli to możliwe, to także sposób, aby nie wstawić go na samym końcu.

Utwórz 12/03/2009 o 20:08
źródło użytkownik
W innych językach...                            


5 odpowiedzi

głosy
5

Prawdopodobnie najprostszą:

mystring = mystring.Replace(")", ") and ");
mystring = mystring.Substring(0, mystring.Length - " and ".Length);
Odpowiedział 12/03/2009 o 20:13
źródło użytkownik

głosy
2

Jeśli masz na myśli, a ja zabieram swój ciąg dosłownie i jak to jest:

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

Następnie można po prostu zrobić:

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

Co skutkowałoby:

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

Jest to zakładając, że nie chcą końcowego znaku „i”.

Odpowiedział 12/03/2009 o 20:15
źródło użytkownik

głosy
2

Można osiągnąć to z zastąpienia ..

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

W wyniku:

"column1 in('a','b') and column2 in('c','d') and column3 in('e','f')"
Odpowiedział 12/03/2009 o 20:14
źródło użytkownik

głosy
2

Struny są niezmienne, więc nie można „tylko” zmienić wartość tego łańcucha. Każda modyfikacja, że ​​chcesz, aby na łańcuch, prowadzi do nowej instancji sznurku.

To może w jaki sposób można osiągnąć to, co chcesz:

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 ());

Ale może są lepsze rozwiązania ...

W każdym razie, jak to możliwe, że otrzyma ten ciąg (który wygląda jak część WHERE oświadczenia SQL) w ten sposób?

Odpowiedział 12/03/2009 o 20:13
źródło użytkownik

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

.+$Część wyrażenia regularnego zapewnia, że nawias zamykający nie znajduje się na końcu linii. Jeśli masz zamiar robić to często, polecam tworzenia i utrzymujących się Regexobiektu do wzorca.

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

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

EDIT: Właśnie sobie sprawę, że jestem idiotą. Ustalone wzory powyżej, z "\\).+$"do "\\)(?=.+$)"tak, że .+$część nie zawiera (a zatem zastąpiony) grę.

Odpowiedział 12/03/2009 o 20:49
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more