web-dev-qa-db-fra.com

Remplacer la première occurrence du motif dans une chaîne

Duplicate possible:
Comment remplacer la première instance d'une chaîne dans .NET?

Disons que j'ai la ficelle:

string s = "Hello world.";

comment puis-je remplacer le premier o dans le mot Hello pour disons Foo?

En d'autres termes, je veux me retrouver avec:

"HellFoo world."

Je sais comment remplacer tous les o mais je veux ne remplacer que le premier

129
Tono Nam

Je pense que vous pouvez utiliser la surcharge de Regex.Replace pour spécifier le nombre maximal de fois à remplacer ...

var regex = new Regex(Regex.Escape("o"));
var newText = regex.Replace("Hello World", "Foo", 1);
202
Reddog
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);
}

voici une méthode d'extension qui pourrait également fonctionner également par demande 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);
    }
}
166
MethodMan

Vous pouvez le faire de différentes manières, mais le plus rapide peut-être utiliser IndexOf pour rechercher la position d'index de la lettre que vous souhaitez remplacer, puis soustraire le texte avant et après ce que vous souhaitez remplacer.

11
Mitchel Sellers