Remplace la dernière occurrence d’un mot dans une chaîne – c #

J’ai un problème où je dois remplacer la dernière occurrence d’un mot dans une chaîne.

Situation: On me donne une chaîne qui est dans ce format:

ssortingng filePath ="F:/jan11/MFrame/Templates/feb11"; 

Je remplace alors TnaName comme ceci:

 filePath = filePath.Replace(TnaName, ""); //feb11 is TnaName 

Cela fonctionne, mais j’ai un problème lorsque TnaName est identique à mon folder name . Lorsque cela se produit, je finis par obtenir une chaîne comme celle-ci:

 F:/feb11/MFrame/Templates/feb11 

Maintenant, il a remplacé les deux occurrences de TnaName par feb11 . Y a-t-il un moyen de ne remplacer que la dernière occurrence du mot dans ma chaîne? Merci.

Note: feb11 est TnaName qui vient d’un autre processus – ce n’est pas un problème.

Voici la fonction pour remplacer la dernière occurrence d’une chaîne

 public static ssortingng ReplaceLastOccurrence(ssortingng Source, ssortingng Find, ssortingng Replace) { int place = Source.LastIndexOf(Find); if(place == -1) return Source; ssortingng result = Source.Remove(place, Find.Length).Insert(place, Replace); return result; } 
  • Source est la chaîne sur laquelle vous souhaitez effectuer l’opération.
  • Find est la chaîne que vous souhaitez remplacer.
  • Replace est la chaîne que vous souhaitez remplacer par.

Utilisez ssortingng.LastIndexOf() pour rechercher l’index de la dernière occurrence de la chaîne, puis utilisez la sous-chaîne pour rechercher votre solution.

Vous devez faire le remplacement manuellement:

 int i = filePath.LastIndexOf(TnaName); if (i >= 0) filePath = filePath.Subssortingng(0, i) + filePath.Subssortingng(i + TnaName.Length); 

Je ne vois pas pourquoi Regex ne peut pas être utilisé:

 public static ssortingng RegexReplace(this ssortingng source, ssortingng pattern, ssortingng replacement) { return Regex.Replace(source,pattern, replacement); } public static ssortingng ReplaceEnd(this ssortingng source, ssortingng value, ssortingng replacement) { return RegexReplace(source, $"{value}$", replacement); } public static ssortingng RemoveEnd(this ssortingng source, ssortingng value) { return ReplaceEnd(source, value, ssortingng.Empty); } 

Usage:

 ssortingng filePath ="F:/feb11/MFrame/Templates/feb11"; filePath = filePath.RemoveEnd("feb11"); // F:/feb11/MFrame/Templates/ filePath = filePath.ReplaceEnd("feb11","jan11"); // F:/feb11/MFrame/Templates/jan11 

Vous pouvez utiliser une classe Path depuis l’espace de noms System.IO :

 ssortingng filePath = "F:/jan11/MFrame/Templates/feb11"; Console.WriteLine(System.IO.Path.GetDirectoryName(filePath));