林子大了,什么鸟都有----.NET运用String的十八层境界
林子大了,什么鳥都有----.NET運用String的十八層境界
在上一文中,提到了一句相當常見但十分荒謬的代碼:Request.QueryString["id"].ToString()。突然涌起一個想法,為什么不總結一下不同層次.Net開發者如何運用string的呢?
古往今來,文本處理一直是所有編程語言的最基礎的功能,也是最核心最重要的功能。任何初學者,如果想學一門編程語言,都要面對大量的文本處理。而或許有一天,即使你成了大師級的人物,也不敢說自己駕馭文本處理的能力,就已登峰造極。對String理解和運用,應該可以很好地代表開發者的專業水平。
寫Request.QueryString["id"].ToString()的顯然屬于比較初級的層次,那么專業一點的層次有什么表現呢?在本文,就試圖歸納劃分一下這水平的層次或境界,并抓些現行給大家參考。
一、入門級
第一層
初涉江湖。String就是這樣:string s =”abc”,帶倆雙引號這就是個String。有天分很快發現string還可以相加。
但是,一說到說什么引用類型?值類型?唉,我好模糊啊……
第二層
不變應萬變。label1.Text = n,報錯說類型不兼容?原來還要ToString()一下。于是吐絲準成了此類.Net程序員的必殺技,Request.QueryString[id].ToString()就是最常見的例子。
第三層
如魚得水。學會用Convert.ToInt32之類方法轉換字符串,轉過去,轉回來。
來挖挖墳,看看早期的.Net程序員就已十分專業:?如何把string解析為int??好在初學C#時我沒看到此文。
第四層
世界真奇妙。光個String類型就有這么多方法,這怎么記不住啊,每個都夠研究個幾天,比如?關于string.Join()的妙用與疑惑?、String.Substring()使用注意, 還有分析Trim、IndexOf、Split等等不逐一列舉了,過去都是園子首頁的常客。
(題外話:一下子都研究明白了生活就沒意思了,經常驚嘆下“原來還有這個”不是挺好的)
二、菜鳥級
第五層
聽說了字符串不要+拼接,要用StringBuilder,不然效率太低。
這篇還不錯,不過題目有點浮:徹底研究StringBuilder。StringBuilder要徹底研究還真不簡單,不過除了極懶的一小撮外,基本算是普及了。
第六層
會用靜態方法啦:比如String.IsNullOrEmpty,但是對String.Format方法,還是要糾結好久吧。要是你會String.Concat,會區別它與StringBuilder用的場合,恭喜你,你的水平離.Net社區牛人—老趙也就差一年多了(?重談字符串連接性能?)。
第七層
ToString的格式輸出,名堂真多:C代表錢,D代表整數,E是指數,F是小數,y是年,大寫M是月,小寫m是分鐘……? 這哪記得住?
其實,能記住前幾種就不錯了,知道用時去查就好(C# 格式化字符串)。尤其,要分清大MM和小mm的區別。只需三分鐘,飛越第七層。
第八層
開始從多個場景,如文件中,取得字符串。了解很多該用String表示的東西,很多不是String的東西,心有靈犀一點通,告別了盲目的類型轉換。
此層說深不深,可以一跳而過;說淺不淺。我們公司有個WebService項目超級規范,全部方法參數、全部返回的實體屬性清一色的string類型。對讀取文件,至今許多有多年開發經驗同行的仍然云里霧里,應該也包括偶。一個博問中問題:請教200M大的TXT文件如何快速讀取,有誰能迅速給出標準實現的?
三、上手級
第九層:
學會了翻轉字符串,真的!恭喜,根據磚家定義,你已超越北大菜鳥級別了(為什么我要反對北大青鳥)。
第十層:
會用foreach遍歷String中的字符,明白了編碼方式決定字符串中的字符,是一個字節,還是兩個或更多。
編碼是個大學問,偶一看就暈,就這么湊合著過了吧。您力所能及的話,還是建議深入了解下:字符集和字符編碼(Charset & Encoding)
第十一層:
開始從流中讀取字符串,偶爾還會重寫下ToString方法 (文件流轉換為string?)。
流是現代編程語言的最重要的基本對象模型,和String地位相當。接觸了這兩者之間的聯系,對一門語言的認識開始立體起來。
第十二層:
處理的字符串工作日漸繁重,直到一天發現了正則表達式,腰不酸了,腿不疼了。
我看的是這種正則表達式30分鐘入門教程,結果花了無數個30分鐘,還是沒入門。不過還是值的,確實有時候比寫代碼處理容易得多,甚至是救命稻草,此時更高端的我們都不會。
四、達人級
第十三層:
一日突然被問到:string a = “a”+ “b”分配了幾次內存?
蒙了,String是什么,Immutable、引用類型、拘留池、程序域,概念大爆發開始了。
年前的面試經歷(二)?,獻丑一下,精彩的是評論。
第十四層:
見到不是一個字符串,而是對一組編碼字節的引用,是所謂見山不是山。
[你必須知道的.NET]第二十二回?中的一段話 “string真是一個豐富而多彩的技術倉庫,飽含了.NET技術中很多精髓與技巧"。
第十五層:
諸如BinaryReader(Writer)/StringReader(Writer),都已不在話下。
看老趙的隨筆:淺談字節序(Byte Order)及其相關操作。
第十六層:
開始在String類源代碼中尋找疑問的答案。
.Net Discovery 系列之一--string從入門到精通
五、大師級
第十七層:
無招勝有招,這種境界,打自動機,寫編譯器,跟玩似的。
園中的腦袋,大概接近了此境界:自己動手開發編譯器(一)編譯器的模塊化工程?。
第十八層:
見山還是山。重寫個String類型都毫無壓力了吧,其實什么類型方法都成了浮云。傳說中的境界……
腦袋的級別再往上,或許變成了這樣:
不要崇拜哥,哥只是傳說。
轉載于:https://www.cnblogs.com/shenzhenjia/archive/2011/07/29/2121601.html
總結
以上是生活随笔為你收集整理的林子大了,什么鸟都有----.NET运用String的十八层境界的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 茅台30年多少钱啊?
- 下一篇: Ajax_ASP.NET 添加 Ajax