2011/8/10 18:38 |
閱讀數 : 2361
我要推薦
|
| 文章分類 :
Tips
訂閱
前言
今天碰到一個小小的需求,我們直接來看簡化後的程式碼:
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()下去了。

↑ 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 –簡化判斷式