117 votes

Comment remplacer la *première instance* d'une chaîne de caractères en .NET ?

Je veux remplacer la première occurrence dans une chaîne donnée.

Comment puis-je réaliser cela en .NET ?

0 votes

Veuillez rédiger des messages clairs et compréhensibles. J'ai également édité celui-ci pour vous. Vous auriez dû spécifier une langue au moins ici.

0 votes

Bien sûr, ce n'est jamais remplacés ... il s'agit toujours d'une nouvelle chaîne contenant l'original avec le texte remplacé. C'est parce que les chaînes de caractères sont immuables.

0 votes

J'ai essayé la méthode ` String.Replace()`, mais elle remplace tous les "AA" par des "XQ".

9voto

Bill the Lizard Points 147311

En syntaxe C# :

int loc = original.IndexOf(oldValue);
if( loc < 0 ) {
    return original;
}
return original.Remove(loc, oldValue.Length).Insert(loc, newValue);

9voto

mortenbpost Points 1204

Méthode d'extension C# qui fera cela :

public static class StringExt
{
    public static string ReplaceFirstOccurrence(this string s, string oldValue, string newValue)
    {
         int i = s.IndexOf(oldValue);
         return s.Remove(i, oldValue.Length).Insert(i, newValue);    
    } 
}

Profitez de

1 votes

Merci de votre attention ! J'ai modifié cette méthode pour créer une méthode d'extension "RemoveFirst" qui... supprime la première occurrence d'un caractère d'une chaîne.

4 votes

Cette opération échouera si oldValue ne fait pas partie de la chaîne.

5voto

Oded Points 271275

On suppose que AA ne doit être remplacé que s'il se trouve au tout début de la chaîne :

var newString;
if(myString.StartsWith("AA"))
{
  newString ="XQ" + myString.Substring(2);
}

Si vous devez remplacer la première occurrence de AA que la chaîne de caractères commence par ce mot ou non, suivez la solution de Marc.

4voto

Anthony Potts Points 2758

Et parce qu'il y a aussi VB.NET à considérer, je voudrais vous proposer :

Private Function ReplaceFirst(ByVal text As String, ByVal search As String, ByVal replace As String) As String
    Dim pos As Integer = text.IndexOf(search)
    If pos >= 0 Then
        Return text.Substring(0, pos) + replace + text.Substring(pos + search.Length)
    End If
    Return text 
End Function

3voto

AakashM Points 32891

L'une des surcharges de Regex.Replace prend un int pour "Le nombre maximum de fois que le remplacement peut se produire". De toute évidence, l'utilisation de Regex.Replace pour le remplacement du texte brut peut sembler exagéré, mais il est certainement concis :

string output = (new Regex("AA")).Replace(input, "XQ", 1);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X