<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      .NETCore CSharp 中級篇2-5

      本節(jié)內(nèi)容為常見實用類和方法的使用

      String.Format

      string.format方法是一個字符串格式化類,它里面的一些寫法是對字符串進行指定格式的轉(zhuǎn)換。

      String.Format 方法的幾種定義:

      * String.Format (String, Object) 將指定的 String 中的格式項替換為指定的 Object 實例的值的文本等效項。
      * String.Format (String, Object[]) 將指定 String 中的格式項替換為指定數(shù)組中相應(yīng) Object
      實例的值的文本等效項。
      * String.Format (IFormatProvider, String, Object[]) 將指定 String
      中的格式項替換為指定數(shù)組中相應(yīng) Object 實例的值的文本等效項。指定的參數(shù)提供區(qū)域性特定的格式設(shè)置信息。
      * String.Format (String, Object, Object) 將指定的 String 中的格式項替換為兩個指定的 Object
      實例的值的文本等效項。
      * String.Format (String, Object, Object, Object) 將指定的 String 中的格式項替換為三個指定的
      Object 實例的值的文本等效項。
      看起來挺抽象的,事實上string.format的寫法有點類似于我們的正則表達式。我們著重的講一下幾個非常常用的用法。

      數(shù)值格式化

      字符 說明 示例 輸出
      C 貨幣格式化,后接數(shù)字為小數(shù)點位數(shù) string.Format("{0:C3}", 2) 獲得當(dāng)前設(shè)置的貨幣格式,例如$2.000或¥2.000
      D 十進制,后接數(shù)字為向前填充0至N位 string.Format("{0:D3}", 2) 002
      X 輸出對應(yīng)的十六進制 string.Format("{0:X000}", 12) C
      G 常規(guī)輸出 string.Format("{0:G}", 2) 2
      N 用分號隔開的數(shù)字 string.Format("{0:N}", 250000) 250,000.00
      自定義 自定義輸出 string.Format("{0:000.000}", 12.2) 012.200
      值得注意的是,大括號括起來的是一個占位符,{0:}表示的是后接參數(shù)的第一個,{1:}則是第二個,作為一個占位符存在。

      占位符

      占位符分為以下兩種:

      *

      零占位符0:如果格式化的值在格式字符串中出現(xiàn)“0”的位置有一個數(shù)字,則此數(shù)字被復(fù)制到結(jié)果字符串中。小數(shù)點前最左邊的“0”的位置和小數(shù)點后最右邊的“0”的位置確定總在結(jié)果字符串中出現(xiàn)的數(shù)字范圍。
      “00”說明符使得值被舍入到小數(shù)點前最近的數(shù)字,其中零位總被舍去。

      *
      數(shù)字占位符#:如果格式化的值在格式字符串中出現(xiàn)“#”的位置有一個數(shù)字,則此數(shù)字被復(fù)制到結(jié)果字符串中。否則,結(jié)果字符串中的此位置不存儲任何值。
      請注意,如果“0”不是有效數(shù)字,此說明符永不顯示“0”字符,即使“0”是字符串中唯一的數(shù)字。如果“0”是所顯示的數(shù)字中的有效數(shù)字,則顯示“0”字符。
      “##”格式字符串使得值被舍入到小數(shù)點前最近的數(shù)字,其中零總被舍去。

      PS:空格占位符
      string.Format("{0,-50}", theObj);//格式化成50個字符,原字符左對齊,不足則補空格
      string.Format("{0,50}", theObj);//格式化成50個字符,原字符右對齊,不足則補空格
      例如,用于固定區(qū)域性的自定義格式字符串為“dddd, dd MMMM yyyy”。

      時間格式化

      格式化時間非常簡單,我們通常描述時間都是年-月-日
      時:分:秒就夠了,在String.Format類中,我們?nèi)∵@些描述詞的英文首字母作為格式化字符,例如1999-05-06我需要轉(zhuǎn)換成國外常見的時間表達方式05/06/99,我們只需要
      "1999-05-06".Format("mm/dd/yy");
      非常的簡單。我們列舉出一個表格詳細的闡明常用時間格式化的字符

      字符 說明 詳情
      d 短日期模式 表示由當(dāng)前 ShortDatePattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“MM/dd/yyyy”。
      D 長日期模式 表示由當(dāng)前 LongDatePattern 屬性定義的自定義 DateTime 格式字符串。例如,“dddd, dd MMMM yyyy”。
      f 完整日期/時間模式(短時間) 表示長日期 (D) 和短時間 (t) 模式的組合,由空格分隔。
      F 完整日期/時間模式(長時間) 表示由當(dāng)前 FullDateTimePattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“dddd, dd MMMM yyyy HH:mm:ss”。
      g 常規(guī)日期/時間模式(短時間) 表示短日期 (d) 和短時間 (t) 模式的組合,由空格分隔。
      G 常規(guī)日期/時間模式(長時間) 表示短日期 (d) 和長時間 (T) 模式的組合,由空格分隔。
      M 或 m 月日模式 表示由當(dāng)前 MonthDayPattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“MMMM dd”。
      t 短時間模式 表示由當(dāng)前 ShortTimePattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“HH:mm”。
      T 長時間模式 表示由當(dāng)前 LongTimePattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“HH:mm:ss”。
      Y 或 y 年月模式 表示由當(dāng)前 YearMonthPattern 屬性定義的自定義 DateTime
      格式字符串。例如,用于固定區(qū)域性的自定義格式字符串為“yyyy MMMM”。
      還有一些自定義的方法,例如我之前舉的例子

      字符 說明 詳情
      N個d 將月中日期表示為從 1 至 31 的數(shù)字。 N個d則是在時間有效位小于N時在前面加0
      N個M 將月表示為從 1 至 12 的數(shù)字。 N個d則是在時間有效位小于N時在前面加0
      N個y 表示年 N個y則是在時間有效位小于N時在前面加0,特別的,1個y也是使用年份后兩位進行表示。
      N個s 將秒表示為從 0 至 59 的數(shù)字。 秒表示自前一分鐘后經(jīng)過的整秒數(shù)
      N個m 將分表示為從 0 至 59 的數(shù)字。 分鐘表示自前一小時后經(jīng)過的整分鐘數(shù)
      N個h 將時表示為從 0 至 12 的數(shù)字。 自午夜或中午開始對整小時計數(shù)
      N個H 將時表示為從 0 至 24 的數(shù)字。 自午夜或中午開始對整小時計數(shù)
      枚舉格式字符串

      字符 說明
      G 或 g 如有可能,將枚舉項顯示為字符串值,否則顯示當(dāng)前實例的整數(shù)值。如果枚舉定義中設(shè)置了 Flags
      屬性,則串聯(lián)每個有效項的字符串值并將各值用逗號分開。如果未設(shè)置 Flags 屬性,則將無效值顯示為數(shù)字項。
      F 或 f 如有可能,將枚舉項顯示為字符串值。如果值可以完全顯示為枚舉項的總和(即使未提供 Flags
      屬性),則串聯(lián)每個有效項的字符串值并將各值用逗號分開。如果值不能完全由枚舉項確定,則將值格式化為整數(shù)值。
      D 或 d 以盡可能短的表示形式將枚舉項顯示為整數(shù)值。
      X 或 x 將枚舉項顯示為十六進制值。按需要將值表示為帶有前導(dǎo)零,以確保值的長度最少有八位
      DateTime


      DateTime是C#時間處理的大殺器,它的效率非常高,顯著的優(yōu)于其他語言的時間處理,其中DateTime類型重寫了ToString()方法,在DateTime的ToString方法里面,我們可以輕而易舉的使用我們的格式化字符對它進行格式化。


      事實上DateTime結(jié)構(gòu)并不是我們今天講的主題,因為DateTime的操作事實上就是我們的string.Format操作,至多我們講一下DateTime和字符串的轉(zhuǎn)換

      符合時間格式的字符串轉(zhuǎn)換成DateTime結(jié)構(gòu)只需要使用
      DateTime.Parse(str);
      我們這節(jié)主要講解的是TimeSpan時間計算類的使用,不過在DateTime中也有部分函數(shù)用于時間計算,例如

      * Add 將指定的TimeSpan的值加到此實例的值上。
      * AddDays 將指定的天數(shù)加到此實例的值上。
      * AddHours 將指定的小時數(shù)加到此實例的值上。
      * AddMilliseconds 將指定的毫秒數(shù)加到此實例的值上。
      * AddMinutes 將指定的分鐘數(shù)加到此實例的值上。
      * AddMonths 將指定的月份數(shù)加到此實例的值上。
      * AddSeconds 將指定的秒數(shù)加到此實例的值上。
      * AddYears 將指定的年份數(shù)加到此實例的值上。
      * Subtract 從此實例中減去指定的時間或持續(xù)時間。
      TimeSpan

      下面的列表闡明了部分TimeSpan的方法

      * Add:與另一個TimeSpan值相加。
      * Days:返回用天數(shù)計算的TimeSpan值。
      * Hours:返回用小時計算的TimeSpan值
      * Milliseconds:返回用毫秒計算的TimeSpan值。
      * Minutes:返回用分鐘計算的TimeSpan值。
      * Negate:返回當(dāng)前實例的相反數(shù)。
      * Seconds:返回用秒計算的TimeSpan值。
      * Subtract:從中減去另一個TimeSpan值。
      * Ticks:返回TimeSpan值的tick數(shù)。
      * TotalDays:返回TimeSpan值表示的天數(shù)。
      * TotalHours:返回TimeSpan值表示的小時數(shù)。
      * TotalMilliseconds:返回TimeSpan值表示的毫秒數(shù)。
      * TotalMinutes:返回TimeSpan值表示的分鐘數(shù)。
      * TotalSeconds:返回TimeSpan值表示的秒數(shù)。
      StringBuilder


      String對象是不可改變的,每次使用System.String類中的方法之一時,都要在內(nèi)存中創(chuàng)建一個新的字符串對象,這就需要為該新對象分配新的空間。如果你需要經(jīng)常操作字符串對象的話,直接使用string進行加減運算是很不劃算的做法,這個時候,我們需要使用我們的StringBuilder類進行操作。

      StringBuilder可以自由擴展大小,因為StringBuilder分配在堆區(qū)。


      并且StringBuilder可以指定其大小,當(dāng)指定分配大小之后,性能就會得到提升。在達到容量之前,它不會為其自己重新分配空間。如果超過指定大小系統(tǒng)會當(dāng)前大小倍增,也就10,15,20。建議指定大小。

      常用的幾個方法

      * StringBuilder.Append //將信息追加到當(dāng)前StringBuilder的結(jié)尾。

      * StringBuilder.AppendFormat //用帶格式文本替換字符串中傳遞的格式說明符。

      * StringBuilder.Insert //將字符串或?qū)ο蟛迦氲疆?dāng)前StringBuilder對象的指定索引處。

      * StringBuilder.Remove //從當(dāng)前StringBuilder對象中移除指定數(shù)量的字符。

      * StringBuilder.Replace //替換指定索引處的指定字符。

      值得注意的一件事情是,對于C#,微軟對于String類型有著特殊的優(yōu)化,如果兩個字符串內(nèi)容相同,那么他們只會被創(chuàng)建一次,也就是說會指向同一塊內(nèi)存地址,并且,C#比較的方法有以下三種

      * ==它是比較的棧里面的值是否相等(值比較)
      * Equals它比較的是堆里面的值是否相等(引用地址值比較)
      * Object.ReferenceEquals(obj1,obj2)它是比較的是內(nèi)存地址是否相等
      示例:
      StringBuilder MyStringBuilder = new StringBuilder("Hello World!",30);
      MyStringBuilder.Insert(6,"test"); MyStringBuilder.Append("test");
      你只需要記住,在面對大量字符串的操作處理中,我們使用StringBuilder來提高我們的運算速度。

      如果我的文章幫助了您,請您在github.NETCoreGuide項目幫我點一個star,在博客園中點一個關(guān)注和推薦。

      Github <https://github.com/StevenEco/.NetCoreGuide>

      BiliBili主頁 <https://space.bilibili.com/33311288>

      WarrenRyan'sBlog <https://blog.tity.xyz>

      博客園 <https://cnblogs.com/warrenryan>

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          青青青在线免费观看 | 亚洲AV秘 无码一区在线 | 女神雪臀吞吐呻吟声娇喘云 | 一边啪啪一边吃奶一边做 | 欧美日韩男女交媾视频-特黄篇 | 五十路熟妇息孑交尾 | 亚洲荡妇 | 久久免费在线观看 | 国产极品在线视频 | 日本XXXX毛少妇高清HD |