C#字符串操做總結數組
一、字符串的一些特性:工具
(1)不可變性:字符串是引用類型,當給字符串賦值時,會在堆中開闢一塊空間來存放字符串,在棧中存放字符串在堆中的地址。(以下圖所示)學習
(2)字符串池(針對字符串常量)ui
當程序中有多個相同的字符串常量時,這時,這些字符串都是指向內存中的同一個字符串,這個特性叫作:字符串池。之因此字符串池不會形成程序的混亂,是由於:字符串具備不可變性。spa
(3)字符串留用(*用的少)(Intern)。orm
string s1 = "a";blog
string s2 = "b";索引
string s3 = "c";內存
string s4 = s1+s2+s3;字符串
string s5 = s1+s2+s3;
//雖然s4和s5這兩個字符串中的內容同樣,可是在內存中是兩塊內存。
string x1="a";
string x2="bc";
string s4=string.intern(s1+s2+s3);
string s5=string.IsInterned(x1+x2);
//這個時候,s4和s5在堆中的地址就是同樣的。(字符串留用)
String字符串:
屬性:Length//獲取字符串的個數(不管中文字符仍是英文字符都是一個char即一個字符
方法:
一、 空字符串的表示及判斷:
(1)空字符串的表示:
string s = "";
string s = string.Empty;兩個是同樣的意思
string.Empty內部是一個靜態只讀的字符串,程序中共享一個內存,因爲具備字符串池的概念,因此寫多個它也會指向同一個內存,因此它與"" 同樣
(2)空字符串的判斷:
判斷字符串爲空能夠 用msg=="",也能夠用msg.Length==0(字符串長度爲0,表示字符串爲空)因此之後對字符串進行是否爲空的判斷時候,就用msg.Length ?=0來判斷。
經過反編譯工具,看到微軟內部實現IsNullOrEmpty的方法,很值得學習!!!
public static bool IsNullOrEmpty(string value)
{
if (value != null)
{
return (value.Length == 0);
}
return true;
}
二、將字符串轉換爲字符數組再進行修改操做:
由於字符串是不可變的,而且在字符串的索引器中也只實現了一個只讀的所引器(只有get),因此不能直接修改字符串中的內容但能夠將字符串轉換成char數組,而後再對其進行修改
三、判斷字符串是否相等:
比較兩個字符串是否相等能夠用s1==s2也能夠用s1.Equals(s2,StringComparison.OrdinalIgnore
Case)忽略大小寫比較
//經過反編譯工具能夠看到,雖然使用的等號進行判斷,但微軟在內部仍是調用的Equals(運算符重載)
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
四、字符串分割方法:(幾乎是萬能的方法了,推薦給你們)
(1)引用命名空間:System.Text.RegularExpressions
(2)定義分割方式:string pattern = " ";(萬能分割方式:string pattern = @"\s*,\s*|\s+";)
(3)開始分割:Regex.Split(s, pattern)
五、StringBuilder:
注意:
(1) StringBuilder 不等於 String,將StringBuilder轉換爲String.用ToString();
(2) StringBuilder僅僅是拼接字符串的工具,大多數狀況下還須要把StringBuilder轉換爲String。
(3) StringBuilder sb = new StringBuilder();
sb.Append();//追加字符串
sb.ToString();//把StringBuilder轉換爲字符串。
sb.Insert();
sb.Replace();