Как вставить значение в строку в определенных позициях c # - PullRequest
3 голосов
/ 12 марта 2009

У меня есть программа, которая получает строку из метода. Я хочу знать, как вставить строковое значение в эту строку в определенных позициях.

Например:

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

Здесь, как бы я вставил строковое значение "и" после каждого вхождения символа ')' в mystring?

PS. Если возможно, также укажите, как не вставлять его прямо в конце.

Ответы [ 5 ]

5 голосов
/ 12 марта 2009

Наверное, самое простое:

mystring = mystring.Replace(")", ") and ");
mystring = mystring.Substring(0, mystring.Length - " and ".Length);
2 голосов
/ 12 марта 2009

Если вы имеете в виду, и я воспринимаю вашу строку буквально и так, как она есть:

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

Тогда вы можете просто сделать:

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

Что приведет к:

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

Предполагается, что вам не нужен трейлинг "и".

2 голосов
/ 12 марта 2009

Вы можете сделать это с помощью замены ..

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

В результате:

"column1 in('a','b') and column2 in('c','d') and column3 in('e','f')"
2 голосов
/ 12 марта 2009

Строки являются неизменяемыми, поэтому вы не можете просто изменить значение этой строки. Каждое изменение, которое вы хотите внести в строку, приводит к новому экземпляру строки.

Может быть, это то, как вы могли бы достичь того, что вы хотите:

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

Но, может быть, есть лучшие решения ...

В любом случае, как получается, что вы получаете эту строку (которая выглядит как часть предложения where в SQL-выражении) таким образом?

0 голосов
/ 12 марта 2009
System.Text.RegularExpressions.Regex.Replace(
    mystring, "\\)(?=.+$)", ") and ");

Часть .+$ регулярного выражения гарантирует, что закрывающая скобка находится не в конце строки. Если вы собираетесь делать это часто, я бы рекомендовал создать и сохранить объект Regex для шаблона.

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

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

РЕДАКТИРОВАТЬ: Просто понял, что я идиот. Исправлены шаблоны выше с "\\).+$" до "\\)(?=.+$)", так что часть .+$ не включена (и, следовательно, не заменена) в совпадении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...