关于c#:如何删除某个字符最后一次重复后的所有文本

how to remove all text after the last recurrence of a certain character

给定任何字符串,我想删除特定字符后的任何字母。

此字符可能在字符串中存在多次,我只想将其应用于最后一次出现。

所以我们假设"/"是字符,下面是一些示例:

http://www.ibm.com/test==>http://www.ibm.com你好/测试=>你好


1
2
if (text.Contains('/'))
    text = text.Substring(0, text.LastIndexOf('/'));

1
2
3
var pos = text.LastIndexOf('/');
if (pos >= 0)
    text = text.Substring(0, pos);

(如注释中所述,在字符串中不存在"/"时编辑以覆盖大小写)


另一个选项是使用字符串。移除

2

通过一些错误检查,可以将代码提取到如下扩展方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static class StringExtensions
{
    public static string RemoveTextAfterLastChar(this string text, char c)
    {
        int lastIndexOfSeparator;

        if (!String.IsNullOrEmpty(text) &&
            ((lastIndexOfSeparator = text.LastIndexOf(c))  > -1))
        {

            return text.Remove(lastIndexOfSeparator);
        }
        else
        {
            return text;
        }
    }
 }

它的用途如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static void Main(string[] args)
{
    List<string> inputValues = new List<string>
    {
        @"http://www.ibm.com/test",
       "hello/test",
       "//",
       "SomethingElseWithoutDelimiter",
        null,
       "    ", //spaces
    };

    foreach (var str in inputValues)
    {
        Console.WriteLine(""{0}" ==> "{1}"", str, str.RemoveTextAfterLastChar('/'));
    }
}

输出:

1
2
3
4
5
6
"http://www.ibm.com/test" ==>"http://www.ibm.com"
"hello/test" ==>"hello"
"//" ==>"/"
"SomethingElseWithoutDelimiter" ==>"SomethingElseWithoutDelimiter"
"" ==>""
"    " ==>"    "