Заменить последнее вхождение слова в строку - С#
У меня проблема, когда мне нужно заменить последнее вхождение слова в строку.
Ситуация: Мне предоставляется строка, которая находится в этом формате:
string filePath ="F:/jan11/MFrame/Templates/feb11";
Затем заменим TnaName
следующим образом:
filePath = filePath.Replace(TnaName, ""); //feb11 is TnaName
Это работает, но у меня проблема, когда TnaName
совпадает с моим folder name
. Когда это произойдет, я получаю строку вроде этого:
F:/feb11/MFrame/Templates/feb11
Теперь он заменил оба вхождения TnaName
на feb11
. Есть ли способ, которым я могу заменить только последнее вхождение слова в моей строке? Спасибо.
Примечание: feb11
есть TnaName
, который исходит из другого процесса - это не проблема.
Ответы
Ответ 1
Вот функция, чтобы заменить последнее вхождение строки
public static string ReplaceLastOccurrence(string Source, string Find, string Replace)
{
int place = Source.LastIndexOf(Find);
if(place == -1)
return Source;
string result = Source.Remove(place, Find.Length).Insert(place, Replace);
return result;
}
-
Source
- это строка, в которой вы хотите выполнить операцию.
-
Find
- это строка, которую вы хотите заменить.
-
Replace
- это строка, которую вы хотите заменить.
Ответ 2
Используйте string.LastIndexOf()
, чтобы найти индекс последнего вхождения строки, а затем используйте подстроку для поиска вашего решения.
Ответ 3
Вам нужно выполнить замену вручную:
int i = filePath.LastIndexOf(TnaName);
if (i >= 0)
filePath = filePath.Substring(0, i) + filePath.Substring(i + TnaName.Length);
Ответ 4
Я не понимаю, почему Regex нельзя использовать:
public static string RegexReplace(this string source, string pattern, string replacement)
{
return Regex.Replace(source,pattern, replacement);
}
public static string ReplaceEnd(this string source, string value, string replacement)
{
return RegexReplace(source, $"{value}$", replacement);
}
public static string RemoveEnd(this string source, string value)
{
return ReplaceEnd(source, value, string.Empty);
}
Использование:
string filePath ="F:/feb11/MFrame/Templates/feb11";
filePath = filePath.RemoveEnd("feb11"); // F:/feb11/MFrame/Templates/
filePath = filePath.ReplaceEnd("feb11","jan11"); // F:/feb11/MFrame/Templates/jan11
Ответ 5
Вы можете использовать класс Path
из System.IO
пространства имен:
string filePath = "F:/jan11/MFrame/Templates/feb11";
Console.WriteLine(System.IO.Path.GetDirectoryName(filePath));