1. 程式人生 > >4-C#格式處理

4-C#格式處理

文化 包括 style str cap uic 查詢 using welcom

本篇博客對應視頻講解

前言

前幾篇文章及對應視頻是帶大家快速體驗了一下C#,了解編程語言最基礎的內容及面向對象的概念。 接下來我會進一步演示和說明C#還能做些什麽。

實際上,C#就一門語言來講,除去面向對象的概念,以及我們前面講的內容(類型、數值計算、分支循環等),基本也就差不多了。以下的內容,與其說是C#的內容,不如說是.Net平臺提供的功能。這也就意味著,當你使用其他依賴.Net平臺的語言時(VB,F#等),你都可以做到相應的操作。

先給大家一個提綱,總覽接下來要講解的內容。

提綱

  1. 格式處理:字符串處理(正則)、時間格式處理、常用類型轉換處理
  2. 文件操作:如何創建、讀取、刪除文件及文件夾等操作。
  3. 編碼操作:不同編碼之間的轉換。
  4. Linq查詢語言:如何優雅一致的處理一組對象。
  5. 網絡請求:http請求,tcp連接,socket
  6. 線程處理:多線程處理
  7. 異步處理:如何方便優雅的使用異步
  8. 序列化處理:包括解析Json,Xml(html)格式內容
  9. 數據庫操作:連接數據庫,數據庫讀寫操作

格式處理

現實世界遠比我們想象的復雜,不同國家、宗教、人種、民族等等,文化都不盡相同。所以,想要使用程序描述我們的世界也是不容易的。我們從現實中獲取的信息,存儲到計算機中,就需要轉換成計算機可識別的內容。我們需要在人機之中尋找平衡。這就需要類型轉換和格式處理。今天我們就來簡單說明一下格式處理。

類型轉換

在我們的生活中,我們並不會區分什麽類型,人與人之間就是通過文字或通話,這些都可以當做"字符串"。 只是不同的詞可能表達了不同的含義。在有類型的語言中,為了優化或精準的進行某些計算操作,所以將一些常用的類型進行區分。所以,很多時候,我們需要把人類寫的文字或說的話,即字符串,轉換成其他的類型,然後再做進一步的處理。

關於類型轉換的內容,可以查看官方文檔。這裏只是說明了隱匿轉換和顯示(強制)轉換。

實際上,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"));

字符串處理

關於字符串相關的內容,可參考官方文檔。我在此沒必要一一列舉,我在視頻中會通過一些示例進行講解。 在我們看文檔及視頻時,嘗試理解以下知識點:

  1. 字符串對象的不可變性
  2. 轉義字符的使用。
  3. 使用Format格式化字符串.
  4. 使用下標方式訪問字符串的某個字符。即字符串可當做字符數組來使用。
  5. 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);

時間格式處理

在現實生活中,我們對日期時間基本是不需要什麽思考的,因為我們通常只識別一兩種我們常用的時間格式,但在計算機中,由於世界各地不同語言下,時間的表示都不一樣,就有很多內容可講了。

  1. 日期時間的表達方式及常用方法 DateTime Api TimeSpan Api
  2. 日期的格式化顯示
  3. 日期之間的計算
  4. 時區

相關的代碼示例:

//日期格式處理
            //創建時間
            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#格式處理