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));