2015-11-17 4 views
-1

Я пытаюсь выяснить способ замены всех вхождений подстроки с восходящими числами.Замена всех вхождений подстроки с возрастающими номерами

Если мы скажем подстроку, я хотел бы заменить "foo", и вся строка "bar foo foo bar bar foo bar", окончательной строкой будет "bar 0 1 bar bar 2 bar".

Я искал Google для решения этого вопроса, но не нашел ответов. Самое близкое, что я мог найти, это замена всех вхождений подстроки на определенную строку.

ответ

1

Один из способов сделать это с Regex.Replace и инлайн MatchEvaluator, который возвращает и пост-приращение счетчика:

var str = "bar foo foo bar bar foo bar"; 
var r = new Regex("foo"); 
var c = 0; 
var replacedString = r.Replace(str, m => (c++).ToString()); 
    // = bar 0 1 bar bar 2 bar 
0

Вы также можете сделать это следующим образом:

 string input = "bar foo foo bar bar foo bar"; 
     string output = string.Empty; 

     var words = input.Split(' '); 
     int numberOfOccurencies = 0; 
     for (int i = 0; i < words.Count(); i++) 
     { 

      if (words[i] == "foo") 
      { 
       words[i] = numberOfOccurencies.ToString(); 
       numberOfOccurencies++; 
      } 
     } 
     output = string.Join(" ", words); 

Я думаю, легче понять.

Смежные вопросы