替换字符串中最后一个单词 - C#

Shr*_*ree 75 c# asp.net

我有一个问题,我需要替换字符串中最后一个单词.

情况:我得到一个字符串,格式如下:

string filePath ="F:/jan11/MFrame/Templates/feb11";
Run Code Online (Sandbox Code Playgroud)

然后我这样替换TnaName:

filePath = filePath.Replace(TnaName, ""); // feb11 is TnaName
Run Code Online (Sandbox Code Playgroud)

这有效,但我遇到的问题TnaName与我的相同folder name.当发生这种情况时,我最终得到一个这样的字符串:

F:/feb11/MFrame/Templates/feb11
Run Code Online (Sandbox Code Playgroud)

现在,它已经取代两次出现的TnaNamefeb11.有没有办法可以只替换字符串中最后一次出现的单词?

注:feb11TnaName它来自另一个进程-这不是一个问题.

Beh*_*der 159

这是替换最后一次出现的字符串的函数

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;
}
Run Code Online (Sandbox Code Playgroud)
  • Source 是要执行操作的字符串.
  • Find 是要替换的字符串.
  • Replace 是要替换它的字符串.

  • 要注意,也许没有匹配(即`Place == -1`) (6认同)
  • 在未找到匹配的情况下,返回源可能比空字符串更符合逻辑. (6认同)
  • 您应该返回“ return Source;”。而不是“ return sting.Empty;” 因为如果找不到Find字符串,则其逻辑失败。 (2认同)
  • 在 ( 和 string Source 之间添加 _this_ ,如下所示: `public static string ReplaceLastOccurance(this string Source...` 并且您有一个漂亮的扩展方法,您可以使用它来替换任何字符串的最后一次出现的字符串。 (2认同)

小智 12

使用string.LastIndexOf()查找的字符串中最后一次出现的索引,然后使用字符串来寻找解决方案.


Moh*_*han 7

你必须手动进行替换:

int i = filePath.LastIndexOf(TnaName);
if (i >= 0)
    filePath = filePath.Substring(0, i) + filePath.Substring(i + TnaName.Length);
Run Code Online (Sandbox Code Playgroud)