Подтвердить что ты не робот

Заменить последнее вхождение слова в строку - С#

У меня проблема, когда мне нужно заменить последнее вхождение слова в строку.

Ситуация: Мне предоставляется строка, которая находится в этом формате:

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, который исходит из другого процесса - это не проблема.

4b9b3361

Ответ 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));