Заменить первое вхождение шаблона в строку

Возможный дубликат:
Как заменить первый экземпляр строки в .NET?

Скажем, у меня есть строка:

string s = "Hello world.";

как я могу заменить первый o в слове Hello, скажем, Foo?

Другими словами, я хочу в итоге:

"HellFoo world."

Я знаю, как заменить все o, но я хочу заменить только первый

Ответ 1

Я думаю, вы можете использовать перегрузку Regex.Replace, чтобы указать максимальное количество раз для замены...

var regex = new Regex(Regex.Escape("o"));
var newText = regex.Replace("Hello World", "Foo", 1);

Ответ 2

public string ReplaceFirst(string text, string search, string replace)
{
  int pos = text.IndexOf(search);
  if (pos < 0)
  {
    return text;
  }
  return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
}

здесь есть метод расширения, который также может работать с запросом VoidKing

public static class StringExtensionMethods
{
    public static string ReplaceFirst(this string text, string search, string replace)
    {
      int pos = text.IndexOf(search);
      if (pos < 0)
      {
        return text;
      }
      return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
    }
}

Ответ 3

Существует несколько способов сделать это, но самым быстрым может быть использование IndexOf для поиска позиции индекса для буквы, которую вы хотите заменить, а затем подстроить текст до и после того, что вы хотите заменить.