1

我在 .NET 3.5 下使用 TrimEnd() 得到不一致的结果。TrimEnd 似乎使用起来很简单,我在这里做错了什么还是这是一个错误

成功案例

  var foundvalue = "hosted.local.chatter.com";
  Console.WriteLine(foundvalue.TrimEnd(".chatter.com".ToCharArray()));
  // Result is "hosted.local" which is expected.

失败案例

 var foundvalue = "hosted.local.chattermailcom";
 Console.WriteLine(foundvalue.TrimEnd(".chattermailcom".ToCharArray()));
 // Result is "hosted" which is incorrect
4

5 回答 5

11

您没有删除确切的字符串,而是".chattermailcom"从末尾删除每个字符,“.”、“c”、“a”、“t”、“e”、“r”等字符串的结尾。 ".chattermailcom"碰巧有所有字母local,但".chatter.com"没有(关键字母是l)。

如果要从末尾删除整个字符串,请考虑使用EndsWith进行检查,然后检查substring是否为真。

您还可以考虑完全避免字符串操作并使用 URI 类;它可以为您解析整个 URL 并返回各种组件。

于 2012-10-02T19:11:40.680 回答
6

根据文档TrimEnd从您传递的数组中的字符串末尾删除所有字符。对于第二种情况,“d”不是数组的一部分,因此该方法将在此处停止。

于 2012-10-02T19:12:15.927 回答
4

也许您可以为此编写自己的方法:

public static class Extensions
{
  public static string RemoveEnd(this string strBefore, string substringToRemove)
  {
    if (!strBefore.EndsWith(substringToRemove))
      return strBefore;

    return strBefore.Remove(strBefore.Length - substringToRemove.Length);
  }
}
于 2012-10-02T19:23:45.867 回答
2

为什么这让你感到惊讶?TrimEnd 需要从末尾删除的字符数组。你告诉它删除所有'.','c','h','a','t'等等..以及为什么你告诉它删除字符串“.local”中的所有字符,他们将被删除。请再次阅读 TrimEnd() 的作用。

于 2012-10-02T19:11:48.450 回答
1

TrimEnd 并非旨在剥离字符串。“local”一词包含 trimEnd 字符中的所有字符(“chattermailcom” -> 包括 l、o、c、a 和 l)。您正在得到 trimEnd 的预期行为。

String.TrimEnd 方法(MSDN):

TrimEnd 方法从当前字符串中删除 trimChars 参数中的所有尾随字符。当在字符串末尾遇到不在 trimChars 中的第一个字符时,修剪操作停止。例如,如果当前字符串是“123abc456xyz789”并且 trimChars 包含从“1”到“9”的数字,则 TrimEnd 方法返回“123abc456xyz”。

于 2012-10-02T19:21:22.300 回答