字符串與正則表達式


  • 字符串使用類String(默認值為String.Empty)來表示,小寫形式string是C#語言中的數據類型
  • 字符串是Char類型的字符數組
  • 字符串是引用類型,它的值位於堆上
  • 字符串變量一旦賦值,它的值就不再能夠改變,因此字符串對象是不變對象
  • 運算符==和!=運算符比較的是string對象的值,而不是引用。實際上是因為String重載了這兩個運算符
  • 如果要改變一個字符串的值,因為字符串是不變類型,因此結果都是生成一個新的字符串對象,其值為新的字符串值,指向原字符串變量的指針改為指向新的字符串對象
  • 如果在一個循環中改變字符串值,或者合並多個字符串的值,那么由於每次都會創新新的字符串對象,因此會產生許多臨時的中間字符串對象,這十分影響性能和執行效率,並造成資源浪費

為了提高性能和保證執行效率,.Net Framework維護了一個字符串池(暫存池、常量池),用以對使用過的字符串進行緩存。當為字符串類型的變量賦值時,此值同時被放入常量池中,在以后需要創新新的字符串時,CLR會首先檢查池中是否存在相同值的字符串對象,如果存在,就將變量指向池中已經存在的對象,那么舊的對象又得以重用了,這個過程稱為“字符串駐留”。而常量池緩存字符串對象的原則是:直接出現在代碼中的字符串都會被放入“常量池”,而動態創建的字符串對象並不會被放入。可使用string.IsInterned(string)進行測試。

為了某些情況下效率低下的問題,比如在循環中改變字符串的值,可以使用StringBuilder類以提高效率,
將StringBuilder和String類對比,String值的追加操作每次都會分配新的內存,而StringBuilder僅當StringBuilder對象緩沖區太小以至於無法容納新數據時才分配內存。因此,當字符串追加操作並不多時,最好還是使用String類。但如果需要任意多次追加字符串,例如在一個循環中,使用StringBuilder類比使用String類性能更高。盡管StringBuilder有着諸多好處,但創建一個StringBuilder實例比創建一個String實例需要花費更多的內存資源,因此使用StringBuilder也是要講場合的。

格式化字符串:
{index[,alignment][:formatString]}
index,參數說明符,從零開始的整數,可標識對象列表中對應的項。如果由參數說明符指定的對象是空引用,則格式項將被字符串“”替換
alignment,可選參數,指示包含格式化值的區域的最小寬度。如果格式化值的長度小於alignment,則用空格填充該區域。如果alignment為負,則格式化的值將在該區域中左對齊;如果alignment為正,則格式化的值將右對齊。如果沒有指定alignment,則該區域的長度為格式化值的長度。如果指定alignment,則需使用逗號。
formatString,可選的格式說明符字符串。如果相應對象是數值,則指定“數字格式字符串”,如果相應對象是DateTime對象,則指定“日期和時間格式字符串”,或者如果相應對象是枚舉值,則指定“枚舉格式字符串”。如果不指定“格式字符串”,則對數字、日期和時間或者枚舉類型“使用常規(G)格式說明符”。如果指定“格式說明符”,則需要使用冒號。

如果需要在格式化字符串中使用花括號,必須使用連續兩個花括號的形式“{{...}}”

格式數值型數據可以使用“標准數字格式字符串”和自定義數字格式字符串“,”標准數字格式字符串“的格式為”格式說明符+精度說明符“,如”N1“,表示精度為1的數字格式(小數點后1位)

格式字符 說明 格式字符 說明
G/g 常規格式 N/n 數字格式
C/c 貨幣格式 P/p 百分比格式
D/d 十進制格式 R/r 往返格式
E/e 科學計數(指數)格式 X/x 十六進制格式
F/f 固定點格式

自定義數字格式字符串

格式說明符 說明
0 零占位符
# 數字占位符
.(點號) 小數點
,(逗號) 千位分隔符和數字比例換算
% 百分比點位符
E0、E+0、E-0、e0、e+0、e-0 科學記數法
|轉義符
‘ABC’、”ABC“ 字符串
;(分號) 部分分隔符
其他 所有其他字符
Double myDouble = 1234567890;
int myInt = 42;

Console.WriteLine(string.Format(”{0:(###) ### - ####}“, myDouble)); // (123) 456 - 7890
Console.WriteLine(string.Format(”{0:My Number = #“, myInt));  // My Number = 42
”“

正則表達式

這里有一篇寫得比較詳細的博文,可供參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM