推薦這個blog:

Award


(ASP.NET 2010、2011、2012年)

其他資源

簡體中文blog

最新回應

[Memo]使用Trim(Char[])要注意的地方

前言
今天碰到一個小小的需求,我們直接來看簡化後的程式碼:

        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        //希望得到的結果是Joey的content


實作
我們希望得到的結果,是將開頭的『Joey:』拔掉,得到『Joey的Content』,當下很直覺的就是用TrimStart()去做

 

        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        var result = content.TrimStart(pattern.ToCharArray());
        //result的值= 的content


出來的結果,得到的卻是『的Content』,連我要的『Joey』都被拔掉了。

問題原因
原因是TrimStart的參數為CharArray,當我們需求是用string,而不是用CharArray思考時,就很容易不小心把Trim()用錯地方。

當我們為了使用TrimStart(),而將"Joey:".ToCharArray()後,字串就變成{'J', 'o', 'e', 'y', ':'},接著TrimStart的行為是從字串的開頭字元,來比較這個Char有沒有在CharArray中,若有,則移掉,直到比較字元不在CharArray中停止。

所以,我們希望得到的『Joey的content』,前面的『Joey』當然也就被移掉了。

改使用Regular Expression
原本想說這麼簡單的需求,不想用到Regular Expression,不過為了之後的彈性,還是改用Regex.Replace來做。

        var content = @"Joey:Joey的content";
        var pattern = @"Joey:";

        var result = Regex.Replace(content, "^" + pattern, string.Empty);

^代表開頭,也就是我要將content裡面,開頭為pattern這個值,取代成string.Empty。

結論
魔鬼都藏在細節中啊,memo一下給自己一個警惕。希望不要有其他朋友跟我一樣傻傻的就給它Trim()下去了。

 

 


點部落-In Joey

↑ Grab this Headline Animator


關連文章

[Powershell]符合條件的檔案備份,並將內容清空

[MSDN文件庫]The specified CGI application encountered an error and the server terminated the process

[ASP.NET]重構之路系列v8 –合併重複的條件片段

[ASP.NET]重構之路系列v7 –簡化判斷式

回應

  • # re: [Memo]使用Trim(Char[])要注意的地方 by Shadow

    To 91版主:

    小弟以為這個案例用

    content.Replace(pattern,""); //這樣不就好了嗎?

    2011/8/11 上午 01:16 | 回覆

  • # re: [Memo]使用Trim(Char[])要注意的地方 by Alex Lee

    用SubString應該也可以吧?

                var result = content.Substring(content.IndexOf(pattern) + pattern.Length);

    2011/8/11 上午 10:49 | 回覆

  • # re: [Memo]使用Trim(Char[])要注意的地方 by 91

    to Shadow :

    這個sample用replace當然可以啊...只是現實的case,不會這麼簡單。

    to Alex Lee :
    SubString當然也是可以啦,只是考量未來彈性的需求囉。之後要把開頭拔掉,可能不是固定的字串,例如我可能是要拔掉<li id="xxx">這種帶有attribute的tag。

    這篇文章,只是要提醒在使用Trim的時候要小心使用,裡面參數用的是Char[],和String的想法是不一樣的。至於solution,只能說有很多種,要看未來可能的需求,來決定用哪一種寫法比較好。(我不想舉例還舉的很複雜啊...>"<)

     

    2011/8/11 上午 11:27 | 回覆

登入後使用進階評論

Please add 4 and 8 and type the answer here: