从.NET中的string末尾修剪string – 为什么这是缺less的?

我总是需要这个,而且Trim(),TrimStart()和TrimEnd()函数不会把string作为input。 你在一个string上调用EndsWith(),然后发现它是否以另一个string结尾,但是如果你想从最后删除它,你必须做子string的操作(或调用Remove()并祈祷它是唯一的例子…)

为什么在.NET中缺less这个基本function? 第二,任何推荐一个简单的方法来实现这个(最好不是正则expression式路由…)

TrimEnd() (和其他修剪方法)接受要修剪的字符,但不接受string。 如果你真的想要一个可以修剪整个string的版本,那么你可以创build一个扩展方法。 例如…

 public static string TrimEnd(this string input, string suffixToRemove, StringComparison comparisonType) { if (input != null && suffixToRemove != null && input.EndsWith(suffixToRemove, comparisonType)) { return input.Substring(0, input.Length - suffixToRemove.Length); } else return input; } 

这可以被调用,就像内置的方法。

编辑 – 包装成一个方便的扩展方法:

 public static string TrimEnd(this string source, string value) { if (!source.EndsWith(value)) return source; return source.Remove(source.LastIndexOf(value)); } 

所以你可以做s = s.TrimEnd("DEF");

我敲了这个快速扩展的方法。

没有积极的作用(我现在无法testing),但理论是正确的。

  public static string RemoveLast(this string source, string value) { int index = source.LastIndexOf(value); return index != -1 ? source.Remove(index, value.Length) : source; } 

使用丹尼尔的代码,并在一段时间,而不是一个直的包装它给function更类似于微软Trimfunction:

 public static string TrimEnd(this string input, string suffixToRemove) { while (input != null && suffixToRemove != null && input.EndsWith(suffixToRemove)) { input = input.Substring(0, input.Length - suffixToRemove.Length); } return input; } 

在这种情况下,正则expression式replace可能是你的朋友。

 var str = "Hello World!"; str = Regex.Replace(str, @"World!$", ""); //str == "Hello" 

我喜欢我的TrimEnd在最后删除string的所有实例,而不仅仅是最后一个。

 public static string TrimEnd(this string str, string trimStr) { if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(trimStr)) return str; while(str.EndsWith(trimStr)) { str = str.Remove(str.LastIndexOf(trimStr)); } return str; } 

这是你反对不得不做的?

 if (theString.endsWith(theOtherString)) { theString = theString.Substring(0, theString.Length - theOtherString.Length); } 

Trim(),TrimStart()和TrimEnd()是replace所有出现的相同字符的方法。 这意味着您只能删除一系列空格或一系列点。

你可以使用一个正则expression式replace为了完成这个:

 string s1 = "This is a sentence.TRIMTHIS"; string s2 = System.Text.RegularExpressions.Regex.Replace(s1, @"TRIMTHIS$", ""); 

您可以将其包装在扩展方法中以方便使用:

 public static string TrimStringEnd(this string text, string removeThis) { return System.Text.RegularExpressions.Regex.Replace(s1, removeThis, ""); } 

并用这种方式来调用它

 string s2 = (@"This is a sentence.TRIMTHIS").TrimStringEnd(@"TRIMTHIS"); 

这里是我提出的扩展方法(从现有的这个问题的答案中得到很大的启发)来补充现有的TrimEnd方法; 它需要一个可选的bool,只允许删除一个string的尾部实例,而不是所有的尾部实例。

 /// <summary> /// Removes trailing occurrence(s) of a given string from the current System.String object. /// </summary> /// <param name="trimSuffix">A string to remove from the end of the current System.String object.</param> /// <param name="removeAll">If true, removes all trailing occurrences of the given suffix; otherwise, just removes the outermost one.</param> /// <returns>The string that remains after removal of suffix occurrence(s) of the string in the trimSuffix parameter.</returns> public static string TrimEnd(this string input, string trimSuffix, bool removeAll = true) { while (input != null && trimSuffix != null && input.EndsWith(trimSuffix)) { input = input.Substring(0, input.Length - trimSuffix.Length); if (!removeAll) { return input; } } return input; } 
 .TrimStart("AB".ToCharArray()) 

以下示例演示如何通过将空格和标点符号视为分隔符来从文本块中提取单个单词。 传递给String.Split(Char[])方法的分隔符参数的字符数组由一个空格字符和一个制表符以及一些常见的标点符号组成。

 string words ="sfdgdfg-121"; string [] split = words.Split(new Char [] {' ', ',', '.', ':', '-' }); foreach (string s in split) { if (s.Trim() != "") Console.WriteLine(s); } 

试试这个代码。

至于为什么你想要的function是缺失的,我怀疑这是因为devise师没有看到它像你想象的那么普通或者基本。 正如你从其他答案中看到的那样,复制是一件容易的事情。

这是我用来做的方法。

 public static string TrimEnd(string input, string suffixToRemove) { if (input == null) throw new ArgumentException("input cannot be null."); if (suffixToRemove == null) throw new ArgumentException("suffixToRemove cannot be null."); int pos = input.LastIndexOf(suffixToRemove); if (pos == (input.Length - suffixToRemove.Length)) return input.Substring(0, pos); return input; } 

尝试使用:

 string test = "This is a test, just a test" test.Split(',')[0]; 

这是从string中修剪string的简单方法。 你得到的是分裂的第一个索引,这是char之前的所有东西