1. 程式人生 > >【C#】——字串

【C#】——字串

一、字串的處理

• string可以看做是char的只讀陣列。char c = s[1];。例子:遍歷輸出string中的每個元素。 • C#中字串有一個重要的特性:不可變性,字串一旦宣告就不再可以改變。所以只能通過索引來讀取指定位置的char,不能對指定位置的char進行修改。 • 如果要對char進行修改,那麼就必須建立一個新的字串,用s. ToCharArray()方法得到字串的char陣列,對陣列進行修改後,呼叫new string(char[])這個建構函式(暫時不用細研究)來建立char陣列的字串。一旦字串被建立,那麼char陣列的修改也不會造成字串的變化。例子:將字串中的A替換為a。

二、String類常用方法

• ToLower():得到字串的小寫形式。 • 注意字串是不可變的,所以這些函式都不會直接改變字串的內容,而是把修改後的字串的值通過函式返回值的形式返回。s.ToLower()與s=s.ToLower() • ToUpper():得到字串的大寫形式; Trim()去掉字串兩端的空白。 • s1.Equals(s2, StringComparison.OrdinalIgnoreCase),兩個字串進行比較不區分大小寫的比較。 string str = null 與 string str = “”說明其中的區別。 答:string str = null 是不給他分配記憶體空間,而string str = \“\” 給它分配長度為空字串的記憶體空間。 string str = null沒有string物件,string str = “”有一個字串物件。 string str = “AklsAkisdAAADDDksndSAD”; char[] chs = str.ToCharArray(); str = str.ToLower(); string temp = “”; for (int i = 0; i < str.Length; i++) { if (chs[i] != str[i]) { temp += (chs[i].ToString()).ToLower(); } else { temp += (chs[i].ToString()).ToUpper(); } } str = temp; Console.WriteLine(str); Console.ReadKey();

三、字串的分割

• string[] Split(params char[] separator):將字串按照指定的分割符分割為字串陣列; • string[] Split(char[] separator, StringSplitOptions options)將字串按照指定的char分割符分割為字串陣列( options 取RemoveEmptyEntries的時候移除結果中的空白字串)

四、字串函式詳解

• 字串替換:string Replace(string oldValue, string newValue)將字串中的出現oldValue的地方替換為newValue。例子:名字替換。 • 取子字串:string Substring(int startIndex),取從位置startIndex開始一直到最後的子字串; • string Substring(int startIndex, int length),取從位置startIndex開始長度為length的子字串,如果子字串的長度不足length則報錯。 • bool Contains(string value)判斷字串中是否含有字串value • bool StartsWith(string value)判斷字串是否以字串value開始; • bool EndsWith (string value)判斷字串是否以字串value結束; • int IndexOf(string value):取字串value第一次出現的位置。 • Int IndexOf(string value,int startIndex)

五、堆和棧的區別

• 棧是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就棧的大小有明確的定義;區域性值型別變數、值型別引數等都在棧記憶體中。 • 堆是程式執行期間動態分配的記憶體空間,你可以根據程式的執行情況確定要分配的堆記憶體的大小。

六、值型別和引用型別的區別

• 將一個值型別變數賦給另一個值型別變數時,將複製包含的值。引用型別變數的賦值只複製對物件的引用,而不復制物件本身。 • 值型別不可能派生出新的型別:所有的值型別均隱式派生自 System.ValueType。但與引用型別相同的是,結構也可以實現介面。 • 值型別不可能包含 null 值: • 每種值型別均有一個隱式的預設建構函式來初始化該型別的預設值。

七、.net中哪些是值型別?哪些是引用型別?

八、強制轉換

• AS 也是轉換,如果轉換不了的,不報異常,返回來的是null • Is 也是轉換,返回的是bool值,true就能轉換, flase不能轉換

九、名稱空間

• namespace(名稱空間),用於解決類重名問題,可以看做“類的資料夾”。 • 如果程式碼和被使用的類在一個namespace則不需要using。 • 在不同名稱空間下的類呼叫有兩種方法: • 寫全稱 名稱空間.類名 • 先using引用名稱空間,再呼叫 using可以宣告namespace的引入,還可以實現非託管資源的釋放,實現了IDisposiable的類在using中建立,using結束後會自動呼叫該物件的Dispose方法,釋放資源。加分的補充回答:using其實等價於try……finally,用起來更方便。