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" "" ==>"" " " ==>" " |