2012-10-02 56 views
1

我在.NET 3.5下使用TrimEnd()得到不一致的结果。 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 
+0

哇...零upvotes。我猜除了我,每个人都知道这个!这是当你自学成才时会发生什么(对S.O.有很多阅读) – LamonteCristo

回答

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); 
    } 
} 
10

你AREN” t从最后删除确切的字符串,".chattermailcom",您将删除每个字符,'。','c','a','t','e','r'等。字符串。 ".chattermailcom"恰好具有local中的所有字母,但".chatter.com"没有(关键字有l)。

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

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

2

为什么会让你感到惊讶? TrimEnd需要从最后删除一系列字符。你告诉它删除所有的'。','c','h','a','t'等等。正是为什么你告诉它删除字符串“.local。”内的所有字符,他们将被删除。请再次阅读TrimEnd()所做的事情。

6

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

1

TrimEnd并非设计用于去除字符串。单词“local”包含trimEnd字符中的所有字符(“chattermailcom” - >包括l,o,c,a和l)。你会得到预期的trimEnd行为。

String.TrimEnd Method (MSDN):

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