Je veux remplacer la première occurrence dans une chaîne donnée.
Comment puis-je réaliser cela en .NET ?
Je veux remplacer la première occurrence dans une chaîne donnée.
Comment puis-je réaliser cela en .NET ?
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);
}
Exemple :
string str = "The brown brown fox jumps over the lazy dog";
str = ReplaceFirst(str, "brown", "quick");
EDIT : Comme @itsmatt mentionné Il y a aussi Regex.Replace(String, String, Int32), qui peut faire la même chose, mais qui est probablement plus coûteux à l'exécution, puisqu'il utilise un analyseur complet alors que ma méthode ne fait qu'une recherche et trois concaténations de chaînes.
EDIT2 : S'il s'agit d'une tâche courante, vous pouvez faire de cette méthode une méthode d'extension :
public static class StringExtension
{
public static string ReplaceFirst(this string text, string search, string replace)
{
// ...same as above...
}
}
En utilisant l'exemple ci-dessus, il est maintenant possible d'écrire :
str = str.ReplaceFirst("brown", "quick");
Attention : Cela ne fonctionne pas correctement avec les caractères combinés Unicode ou les ligatures. Par exemple, ReplaceFirst("oef", "œ", "i")
renvoie incorrectement "ief" au lieu de "if". Voir aussi cette question pour plus d'informations.
Comme itsmatt a déclaré Regex.Remplacer est un bon choix pour cela ; cependant, pour rendre sa réponse plus complète, je vais la compléter avec un exemple de code :
using System.Text.RegularExpressions;
...
Regex regex = new Regex("foo");
string result = regex.Replace("foo1 foo2 foo3 foo4", "bar", 1);
// result = "bar1 foo2 foo3 foo4"
Le troisième paramètre, défini à 1 dans ce cas, est le nombre d'occurrences du motif regex que vous voulez remplacer dans la chaîne d'entrée à partir du début de la chaîne.
J'espérais que cela pourrait être fait avec un système statique. Regex.Remplacer mais malheureusement, il semble que vous ayez besoin d'une instance Regex pour le faire.
Jetez un coup d'œil à Regex.Remplacer .
En tenant compte de la "première seulement", peut-être :
int index = input.IndexOf("AA");
if (index >= 0) output = input.Substring(0, index) + "XQ" +
input.Substring(index + 2);
?
Ou plus généralement :
public static string ReplaceFirstInstance(this string source,
string find, string replace)
{
int index = source.IndexOf(find);
return index < 0 ? source : source.Substring(0, index) + replace +
source.Substring(index + find.Length);
}
Entonces:
string output = input.ReplaceFirstInstance("AA", "XQ");
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.
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".
2 votes
Cette question - stackoverflow.com/questions/141045/ - révèle tout ce qu'il faut faire
0 votes
Remplacez-vous toujours les deux premiers caractères de la chaîne ? Ou y a-t-il des chaînes qui ne commencent pas par "AA" ? Y a-t-il des cas où vous devez remplacer "AA" alors qu'il apparaît au milieu de la chaîne (comme "YZAA123" -> "YZXQ123") ?
1 votes
Note : fusion avec une autre question similaire qui utilisait "AA" => "XQ" comme exemples à trouver/remplacer.
0 votes
@Marc Gravell - Cette question ne devrait-elle pas être étiquetée C# également ?