在字符串中最后一次出现分隔符后删除字符

时间:2016-02-16 11:21:32

标签: c# string

有没有办法在最后一次出现分隔符后删除字符串中的字符?

我已经研究过以下问题。

Split string by last separator - 在这种情况下,省略最后一次出现之前的字符。但我只需要与此相反。

Remove last characters from a string in C#. An elegant way? - 这里删除第一次出现分隔符后的字符。

例如 我有一个字符串

"D:\dir1\subdir1\subdir11\subdir111\file1.txt"

我期望的结果是

"D:\dir1\subdir1\subdir11\subdir111"

注意:这只是一个例子。我也需要一个解决方案来处理其他情况。

3 个答案:

答案 0 :(得分:4)

您可以使用String.Remove()方法。

string test = @"D:\dir1\subdir1\subdir11\subdir111\file1.txt";
string result = test.Remove (test.LastIndexOf ('\\'));

result中存储的值将为

"D:\dir1\subdir1\subdir11\subdir111"

答案 1 :(得分:1)

这应该是最安全的方式

string Pathname = @"D:\dir1\subdir1\subdir11\subdir111\file1.txt";
string Result = Path.GetDirectoryName(Pathname);

答案 2 :(得分:1)

您可以使用LastIndexOf

轻松实现此目的
string str =@"D:\dir1\subdir1\subdir11\subdir111\file1.txt"
str= str.SubString(0,str.LastIndexOf("\\"));

如果您正在寻找通用的东西,请创建扩展方法

public static string GetStringBeforeLastIndex(this string str,string delimeter)
{
  return str.SubString(0,str.LastIndexOf(delimeter));
}

现在你只需要调用方法

string str =@"D:\dir1\subdir1\subdir11\subdir111\file1.txt"
    str = str.GetStringBeforeLastIndex("\\"); you can pass any delimeter

 string str =@"asdd-asdasd-sdfsdf-hfghfg"
        str = str.GetStringBeforeLastIndex("-");