4-C#格式處理
本篇博客對應視頻講解
前言
前幾篇文章及對應視頻是帶大家快速體驗了一下C#,了解編程語言最基礎的內容及面向對象的概念。 接下來我會進一步演示和說明C#還能做些什麽。
實際上,C#就一門語言來講,除去面向對象的概念,以及我們前面講的內容(類型、數值計算、分支循環等),基本也就差不多了。以下的內容,與其說是C#的內容,不如說是.Net平臺提供的功能。這也就意味著,當你使用其他依賴.Net平臺的語言時(VB,F#等),你都可以做到相應的操作。
先給大家一個提綱,總覽接下來要講解的內容。
提綱
- 格式處理:字符串處理(正則)、時間格式處理、常用類型轉換處理
- 文件操作:如何創建、讀取、刪除文件及文件夾等操作。
- 編碼操作:不同編碼之間的轉換。
- Linq查詢語言:如何優雅一致的處理一組對象。
- 網絡請求:http請求,tcp連接,socket
- 線程處理:多線程處理
- 異步處理:如何方便優雅的使用異步
- 序列化處理:包括解析Json,Xml(html)格式內容
- 數據庫操作:連接數據庫,數據庫讀寫操作
格式處理
現實世界遠比我們想象的復雜,不同國家、宗教、人種、民族等等,文化都不盡相同。所以,想要使用程序描述我們的世界也是不容易的。我們從現實中獲取的信息,存儲到計算機中,就需要轉換成計算機可識別的內容。我們需要在人機之中尋找平衡。這就需要類型轉換和格式處理。今天我們就來簡單說明一下格式處理。
類型轉換
在我們的生活中,我們並不會區分什麽類型,人與人之間就是通過文字或通話,這些都可以當做"字符串"。 只是不同的詞可能表達了不同的含義。在有類型的語言中,為了優化或精準的進行某些計算操作,所以將一些常用的類型進行區分。所以,很多時候,我們需要把人類寫的文字或說的話,即字符串,轉換成其他的類型,然後再做進一步的處理。
關於類型轉換的內容,可以查看官方文檔。這裏只是說明了隱匿轉換和顯示(強制)轉換。
實際上,C#中,不同的類型都對應著不同的類。比如Int,String,Long,Byte,DateTime等等,當我們想要進行轉換的時候都可以在相應的類中找到相關的方法。
同時我們還有Convert
類的幫助,以幫助我們進行更多轉換的需求。這些內容可通過以下鏈接,或通過我們的教學視頻中的演示去學習。
- 字符串與數值的轉換
- 字符串與日期時間的轉換
示例代碼:
int a = 13; double b = 2.13; //顯示轉化 var b1 = (int)b; //判斷類型 if (b1 is int) { Console.WriteLine("(int)b的類型為:" + b1.GetType().Name + ",值為:" + b1); } else { Console.WriteLine($"{b}=>{b1}"); } //字符串轉數字 Console.WriteLine(int.Parse("14")); Console.WriteLine(double.Parse("13.5")); //使用Convert類 Console.WriteLine(Convert.ToInt32("14")); Console.WriteLine(Convert.ToDouble("13.5"));
字符串處理
關於字符串相關的內容,可參考官方文檔。我在此沒必要一一列舉,我在視頻中會通過一些示例進行講解。 在我們看文檔及視頻時,嘗試理解以下知識點:
- 字符串對象的不可變性
- 轉義字符的使用。
- 使用Format格式化字符串.
- 使用下標方式訪問字符串的某個字符。即字符串可當做字符數組來使用。
- StringBuilder的作用。
NET 中的字符串操作進行了高度的優化,在大多數情況下不會顯著影響性能。 但是,在某些情況下(例如,執行數百次或數千次的緊密循環),字符串操作可能影響性能。 StringBuilder 類創建字符串緩沖區,用於在程序執行多個字符串操控時提升性能。 使用 StringBuilder 字符串,還可以重新分配各個字符,而內置字符串數據類型則不支持這樣做。 6. 正則匹配搜索。 經常用來判斷格式(手機、身份證號、郵箱等)是否正確,以及匹配特定的內容。 格式參考 最佳實踐
相關的代碼示例:
//字符串轉義文檔: https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#string-escape-sequences string output = "hello NilTor,\nWelcome to Msdev.cc!\n\tThank you!"; Console.WriteLine(output); output = "\"類\"的概念"; Console.WriteLine(output); Console.WriteLine("我的名字是{0}", "NilTor"); output = String.Format("你好,{0}", "NilTor"); Console.WriteLine(output); //字符串當做字符數組使用 output = "零一二三四五"; for (int i = 0; i < output.Length; i++) { Console.WriteLine(string.Concat(i, ":", output[i])); } //更加靈活的字符串處理 StringBuilder // 文檔鏈接:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/strings/#using-stringbuilder-for-fast-string-creation var sb = new StringBuilder("MilTor"); //output[0] = "佰"; //只讀不可更改 sb[0] = 'N'; sb.Append(". Nice to meet you"); sb.Insert(0, "Hello "); Console.WriteLine(sb.ToString()); //正則匹配 //文檔鏈接:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-language-quick-reference //1 判斷格式 string phone = "13890902211"; string pattern = @"\d{11}"; if (Regex.IsMatch(phone, pattern)) { Console.WriteLine($"{phone} 符合手機格式"); } else { Console.WriteLine($"{phone} 格式錯誤"); } //2 匹配特定內容 string sites = "我們官方網站的網址是:https://msdev.cc,歡迎訪問"; // 分組匹配 pattern = @"://(?<websites>\w+\.\w+),"; // 匹配 var match = Regex.Match(sites, pattern); // 輸出匹配的內容 Console.WriteLine(match.Groups["websites"].Value);
時間格式處理
在現實生活中,我們對日期時間基本是不需要什麽思考的,因為我們通常只識別一兩種我們常用的時間格式,但在計算機中,由於世界各地不同語言下,時間的表示都不一樣,就有很多內容可講了。
- 日期時間的表達方式及常用方法 DateTime Api TimeSpan Api
- 日期的格式化顯示
- 日期之間的計算
- 時區
相關的代碼示例:
//日期格式處理 //創建時間 var dateTime = DateTime.Now;//當前日期 Console.WriteLine("當前時間:" + dateTime.ToString()); //字符串轉化到日期 //標準格式的轉化 string date = "2017/11/12"; Console.WriteLine(DateTime.Parse(date).ToString()); date = "2017-12-12 13:22:20"; Console.WriteLine(DateTime.Parse(date).ToString()); //自定義格式轉化 date = "12月20號,下午3點"; Console.WriteLine(DateTime.ParseExact(date, "MM月dd號,tth點", CultureInfo.CreateSpecificCulture("zh-cn"))); //日期計算 //三年前的今天是星期幾? dateTime = dateTime.AddYears(-3); Console.WriteLine("三年前的今天是:" + dateTime.DayOfWeek); //ddd:周幾 dddd:星期幾 Console.WriteLine("三年前的今天是:" + dateTime.ToString("dddd"));
以上內容有很多,實際上我們最常用的,大家只需要記住DateTime
類就可以了。而在有其他需求的時候,就可以去查閱相關的文檔即可。
4-C#格式處理