1、字符串轉字符數組
(1)、ToCharArray()方法,源碼如下:

調用代碼:
var str = "Hello World"; //將字符串轉換成字符數組 var result = str.ToCharArray(); var enumerator = result.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); }
輸出結果:

(2)、
源碼如下:

調用代碼如下:
var str = "Hello World"; //將字符串轉換成字符數組 var result = str.ToCharArray(2,2); var enumerator = result.GetEnumerator(); while (enumerator.MoveNext()) { Console.WriteLine(enumerator.Current); }
輸出結果:

(3)、
源碼如下:

作用:清空字符串前后的空格
調用代碼如下:
var str = " Hello World "; //調用trim方法去除前后的空格 var result = str.Trim(); Console.WriteLine("str的原長度:{0},str調用Trim()方法之后的長度{1},結果字符串:{2}",str.Length,result.Length, "$"+ result + "$");

(4)、
源碼如下:

調用代碼如下:
var str = " Hello World "; //str調用trim方法的代碼執行過程 //1、str處理開頭的字母部分,str開頭的首字母是空格,然后檢索傳入的參數是否有空格,有就清除開頭所有的空格,並執行下一個字母的判斷 //下一個字母如果傳入的參數當中有則清除字符串中的改該字母(連續則清除所有連續的),沒有就不在對字符串的開頭進行操作 //注:整個過程以字符串為主,如果調用trim方法的字符串中的字符,在傳入參數中沒有,那么整個過程中段. //2、str處理末尾的字母部分,str末尾的字母是空格,然后檢索傳入的參數是否有空格,有就清除末尾所有的空格,並執行下一個字母的判斷,沒有就不在對字符串的末尾進行操作 //下一個字母如果傳入的參數當中有則清除字符串中的改該字母(連續則清除所有連續的),沒有就不在對字符串的開頭進行操作 //注:整個過程以字符串為主,如果調用trim方法的字符串中的字符,在傳入參數中沒有,那么整個過程中段. var result = str.Trim(' ', 'd', 'H', 'r', 'e'); Console.WriteLine("str的原長度:{0},str調用Trim()方法之后的長度{1},結果字符串:{2}", str.Length, result.Length, "$" + result + "$"); Console.ReadKey();

(5)、
源碼如下:

var str = " Hello World "; //1、str處理末尾的字母部分,str末尾的字母是空格,然后檢索傳入的參數是否有空格,有就清除末尾所有的空格,並執行下一個字母的判斷,沒有就不在對字符串的末尾進行操作 //下一個字母如果傳入的參數當中有則清除字符串中的改該字母(連續則清除所有連續的),沒有就不在對字符串的開頭進行操作
//輸出:"$ Hello Worl$" var result = str.TrimEnd(' ', 'o', 'd', 'r', 'o'); //1、str處理末尾的字母部分,str末尾的字母是空格,然后檢索傳入的參數是否有空格,有就清除末尾所有的空格,並執行下一個字母的判斷,沒有就不在對字符串的末尾進行操作 //下一個字母如果傳入的參數當中有則清除字符串中的改該字母(連續則清除所有連續的),沒有就不在對字符串的開頭進行操作 //輸出:"$ Hello W$" var result2 = str.TrimEnd(' ', 'd', 'l', 'r', 'o'); Console.WriteLine("$" + result + "$"); Console.WriteLine("$" + result2 + "$");

(6)、
源碼如下:

(5)的反例,處理字符串的開頭.
(7)、
源碼如下:

參數:value-目標字符串 comparisonType-比較類型
作用:判斷傳入的字符串是不是當前字符串的開頭,可設置比較類型(二進制比較、忽略語言文化比較、按當前線程的語言文化比較)
調用代碼如下:
var str = "Hello World"; //判斷str字符串是不是以"Hello"字符串開頭,"Hello"字符串和"Hello World"字符串的比較方式位二進制比較, //是速度最快的一種,但前提是字符串不能是展示給用戶看的信息 //輸出:True var result = str.StartsWith("Hello",StringComparison.Ordinal); //判斷str字符串是不是以"Hello"字符串開頭,"Hello"字符串和"Hello World"字符串的比較方式為采用當前線程設置的語言文化,並忽略大小寫的比較方式 var result1 = str.StartsWith("Hello", StringComparison.CurrentCultureIgnoreCase); Console.WriteLine(result+"...."+ result1);//輸出:True....True
(8)、
源碼如下:

參數:value-目標字符串 ignorecase-是否忽略大小寫 culture-語言文化
var str = "Hello World"; //判斷str字符串是不是以"Hello"字符串開頭,"Hello"字符串和"Hello World"字符串的比較方式為當前線程的語言文化為背景的情況下忽略大小寫的方式 //輸出:True var result = str.StartsWith("Hello",true,Thread.CurrentThread.CurrentCulture); //判斷str字符串是不是以"Hello"字符串開頭,"Hello"字符串和"Hello World"字符串的比較方式為以中文(zh-CN代表中文0)為背景的情況下不忽略大小寫的方式 //輸出:True var result1 = str.StartsWith("Hello", false, new System.Globalization.CultureInfo("zh-CN")); Console.WriteLine(result+"...."+ result1);//輸出:True....True
在介紹Split前,介紹一個枚舉,設置Split處理后的字符串數組是否輸出空字符串
public enum StringSplitOptions { // // 摘要: // 返回的值包括數組的元素,包含一個空字符串 None = 0, // // 摘要: // 返回值不包括包含空字符串的數組元素 RemoveEmptyEntries = 1 }
(9)、
源碼如下:

調用代碼如下:
var str = "Hello World"; //Split不指定參數,默認按照空格對字符串進行分割 var result = str.Split(); //輸出:Hello和World兩個單詞 var en = result.GetEnumerator(); while (en.MoveNext()) { Console.WriteLine(en.Current); } Console.WriteLine("----------略微復雜的字符串分割-------------"); //先按空格對字符串進行分割,得到Hello和World兩個字符串 //在按H對Hello和World進行分割得到空格和ello和World //在按l對上面的三個字符串進行分割得到空格和e和空格和o和Wor和d //在按r對上面的6個字符串進行分割得到空格和e和空格和o和Wo和空格和d var result1 = str.Split(' ','H','l','r'); var en1 = result1.GetEnumerator(); while (en1.MoveNext()) { Console.WriteLine(en1.Current); }

注:如果該方法不給參數,默認按照空格進行分割.
(10)、
參數: separator一指定的分隔符 count一分割產生的子字符串的最大數量
調用代碼如下:
string delimStr = " ,.:"; char[] delimiter = delimStr.ToCharArray(); string words = "one two,three:four."; string[] result = default(string[]); for (int i = 1; i <=5; i++) { result = words.Split(delimiter, i); Console.WriteLine("根據指定的分隔符將一個字符串拆分成傳入的最大數量的子字符串,當前傳入的最大數量為:{0}", i); foreach (var s in result) { Console.WriteLine(s); } } Console.ReadKey();

(11)、
參數: separator一指定的分隔符 count一分割產生的子字符串的最大數量 options一是否要清除結果中的空字符串
調用代碼:
var str = "Hello World"; var res = str.Split(new char[] { ' ', 'H' }, 3); Console.WriteLine("-----------沒有去空格的結果(傳入了 StringSplitOptions.None或者不傳這個參數(默認這個參數))------------"); foreach (var i in res) { Console.WriteLine(i); } Console.WriteLine("-----------去空格的結果(StringSplitOptions.RemoveEmptyEntries)------------"); var result = str.Split(new char[]{' ','H'}, 3, StringSplitOptions.RemoveEmptyEntries); var en = result.GetEnumerator(); while (en.MoveNext()) { Console.WriteLine(en.Current); } Console.ReadKey();

(12)、
作用:根據傳入的字符串數組進行分割,並選擇性的清除結果集中的空字符串
var str = "Hello World"; var res = str.Split(new string[] { "o " }, StringSplitOptions.None); Console.WriteLine("-----------沒有去空格的結果(傳入了 StringSplitOptions.None或者不傳這個參數(默認這個參數))------------"); foreach (var i in res) { Console.WriteLine(i); }

(13)、
作用:根據傳入的字符串數組進行分割,並選擇性的清除結果集中的空字符串,並指定分割產生的最大字符串數.
示例代碼和(11)類似
(12)、
作用:連接一個字符串數組.傳入一個繼承了IEnumerable<string>稱之為(可枚舉字符串對象)
調用代碼如下:
// List<string>繼承自IEnumerable<string> var list = new List<string>(); list.Add("1"); list.Add("2"); var result=String.Concat(list); Console.WriteLine(result);

(13)、
源碼如下:

紅框中的代碼說明傳入的必須是C#基元類型(包括string)的可枚舉數組對象,如果是自定義類型,返回的就是類名的和.
作用:將一個基元類型的可枚舉數組對象轉換成字符串表現形式
var list = new List<double>(); list.Add(11.1); list.Add(12.1); var result= String.Concat<double>(list); var secondList = new List<bool>(); secondList.Add(true); secondList.Add(false); var secondResult = String.Concat<bool>(secondList); Console.WriteLine(result+"...."+ secondResult);

(14)、
源碼如下:

觀察源碼發現,其實調用了IndexOf實例方法,並指定字符串的比較方式為二進制比較方式,為最快的比較方式.
作用:判斷字符串中是否存在傳入參數字符串.
調用代碼:
var str = "大學專科"; var result = str.Contains("大專"); var result1 = str.Contains("大學"); Console.WriteLine(result);//輸出:False Console.WriteLine(result1);//輸出:True
(15)、
源碼如下:

作用:復制一個字符串變量值到另一個字符串變量
調用代碼如下:
var str = "abc"; var str1 = "xyz"; Console.WriteLine("------------下面通過Copy方法賦值--------------"); str1 = String.Copy(str); Console.WriteLine("str 和 str1 {0} 同一個引用地址.",ReferenceEquals(str,str1)?"是": "不是"); Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "不"); Console.WriteLine(); Console.WriteLine("------------下面通過引用賦值--------------"); str1 = str; Console.WriteLine("str 和 str1 {0} 同一個引用地址.", ReferenceEquals(str, str1) ? "是" : "不是"); Console.WriteLine("str的值和str1的值{0}相等.", string.Equals(str, str1, StringComparison.Ordinal) ? "" : "不");

(16)、
參數說明:
sourceIndex - 要復制的此實例中第一個字符的索引
destination - 此實例中的字符所復制到的 Unicode 字符數組
destinationIndex - destination 中的索引,在此處開始復制操作。
count - 此實例中要復制到 destination 的字符數。
調用代碼如下:
string source = "xiaochao"; char[] destination = {'T','h','e',' ','a','a','a', 'a', 'a', 'a', 'a', 'a',' ','i','s',' ','m','v','p'}; //從source的索引為0的地方法開始,獲取source中source長度個字符,將獲取的字符從destination中索引為4的地方開始覆蓋 source.CopyTo(0, destination, 4, source.Length); Console.WriteLine(destination); source = "I think so!"; //從source的索引為0的地方法開始,獲取source中source長度個字符,將獲取的字符從destination中索引為4的地方開始覆蓋 source.CopyTo(0, destination,4 ,source.Length); Console.WriteLine(destination);

(17)、
String.Format 方法的幾種定義:
String.Format (String, Object) 將指定的 String 中的格式項替換為指定的 Object 實例的值的文本等效項。
String.Format (String, Object[]) 將指定 String 中的格式項替換為指定數組中相應 Object 實例的值的文本等效項。
String.Format (IFormatProvider, String, Object[]) 將指定 String 中的格式項替換為指定數組中相應 Object 實例的值的文本等效項。指定的參數提供區域性特定的格式設置信息。
String.Format (String, Object, Object) 將指定的 String 中的格式項替換為兩個指定的 Object 實例的值的文本等效項。
String.Format (String, Object, Object, Object) 將指定的 String 中的格式項替換為三個指定的 Object 實例的值的文本等效項。
常用的格式化數值結果表
| 字符 |
說明 |
示例 |
輸出 |
| C | 貨幣 | string.Format("{0:C3}", 2) | $2.000 |
| D | 十進制 | string.Format("{0:D3}", 2) | 002 |
| E | 科學計數法 | 1.20E+001 | 1.20E+001 |
| G | 常規 | string.Format("{0:G}", 2) | 2 |
| N | 用分號隔開的數字 | string.Format("{0:N}", 250000) | 250,000.00 |
| X | 十六進制 | string.Format("{0:X000}", 12) | C |
| string.Format("{0:000.000}", 12.2) | 012.200 |
常用的幾種實例
1、字符串的數字格式
string str1 =string.Format("{0:N1}",56789); //result: 56,789.0 string str2 =string.Format("{0:N2}",56789); //result: 56,789.00 string str3 =string.Format("{0:N3}",56789); //result: 56,789.000 string str8 =string.Format("{0:F1}",56789); //result: 56789.0 string str9 =string.Format("{0:F2}",56789); //result: 56789.00 string str11 =(56789 / 100.0).ToString("#.##"); //result: 567.89 string str12 =(56789 / 100).ToString("#.##"); //result: 567
2、格式化貨幣(跟系統的環境關,中文系統默認格式化人民幣,英文系統格式化美元
string.Format("{0:C}",0.2)
結果為:¥0.20 (英文操作系統結果:$0.20)
默認格式化小數點后面保留兩位小數,如果需要保留一位或者更多,可以指定位數
string.Format("{0:C1}",23.15)
結果為:¥23.2 (截取會自動四舍五入)
格式化多個Object實例
string.Format("市場價:{0:C},優惠價{1:C}",23.15,19.82)
3、格式化十進制的數字(格式化成固定的位數,位數不能少於未格式化前,只支持整形)
string.Format("{0:D3}",23) //結果為:023 string.Format("{0:D2}",1223) //結果為:1223,(精度說明符指示結果字符串中所需的最少數字個數。)
4、用分號隔開的數字,並指定小數點后的位數
string.Format("{0:N}", 14200) //結果為:14,200.00 (默認為小數點后面兩位) string.Format("{0:N3}", 14200.2458) //結果為:14,200.246 (自動四舍五入)
5、格式化百分比
string.Format("{0:P}", 0.24583) //結果為:24.58% (默認保留百分的兩位小數) string.Format("{0:P1}", 0.24583) //結果為:24.6% (自動四舍五入)
6、零占位符和數字占位符
string.Format("{0:0000.00}", 12394.039) //結果為:12394.04 string.Format("{0:0000.00}", 194.039) //結果為:0194.04 string.Format("{0:###.##}", 12394.039) //結果為:12394.04 string.Format("{0:####.#}", 194.039) //結果為:194
下面的這段說明比較難理解,多測試一下實際的應用就可以明白了。
零占位符: 如果格式化的值在格式字符串中出現“0”的位置有一個數字,則此數字被復制到結果字符串中。小數點前最左邊的“0”的位置和小數點后最右邊的“0”的位置確定總在結果字符串中出現的數字范圍。 “00”說明符使得值被舍入到小數點前最近的數字,其中零位總被舍去。
數字占位符: 如果格式化的值在格式字符串中出現“#”的位置有一個數字,則此數字被復制到結果字符串中。否則,結果字符串中的此位置不存儲任何值。
請注意,如果“0”不是有效數字,此說明符永不顯示“0”字符,即使“0”是字符串中唯一的數字。如果“0”是所顯示的數字中的有效數字,則顯示“0”字符。 “##”格式字符串使得值被舍入到小數點前最近的數字,其中零總被舍去。
7、日期格式化
string.Format("{0:d}",System.DateTime.Now) //結果為:2009-3-20 (月份位置不是03) string.Format("{0:D}",System.DateTime.Now) //結果為:2009年3月20日 string.Format("{0:f}",System.DateTime.Now) //結果為:2009年3月20日 15:37 string.Format("{0:F}",System.DateTime.Now) //結果為:2009年3月20日 15:37:52 string.Format("{0:g}",System.DateTime.Now) //結果為:2009-3-20 15:38 string.Format("{0:G}",System.DateTime.Now) //結果為:2009-3-20 15:39:27 string.Format("{0:m}",System.DateTime.Now) //結果為:3月20日 string.Format("{0:t}",System.DateTime.Now) //結果為:15:41 string.Format("{0:T}",System.DateTime.Now) //結果為:15:41:50
18、
獲取指定字符數組中的任意字符在此實例中第一個匹配項的從零開始的索引。
調用代碼如下:
char[] chars = { 'a', 'e', 'i', 'o', 'u', 'y','A', 'E', 'I', 'O', 'U', 'Y' }; String s = "The long and winding road..."; Console.WriteLine("chars中的第一個字出現在s中的字符是:{0},出現的位置索引是:{1}",s[s.IndexOfAny(chars)], s.IndexOfAny(chars));

19、
向當前字符串實例的startIndex的位置,插入一段指定的字符串(value)
調用代碼如下:
String original = "aaabbb"; Console.WriteLine("原字符串: '{0}'", original); String modified = original.Insert(3, " "); Console.WriteLine("Insert修改后的字符串: '{0}'", modified);

20、
將指定的可枚舉基元類型通過傳入的分隔字符串進行連接.
調用代碼如下:
//將List數組中的元素通過"$$"進行連接 var result=String.Join<int>("$$", new List<int>() { 1, 2, 3, 4, 5, 6 }); Console.WriteLine(result);

21、
作用:向當前實例字符串的左邊填充空格,以達到totalWidth長度的字符數,以實現右對齊的功能.
調用代碼如下:
String str = "Hello World"; String result = str.PadLeft(20); Console.WriteLine(result);

22、
作用:向當前實例字符串的左邊填充指定字符(paddingChar),以達到(totalWidth)長度的字符數,以實現右對齊的功能.
調用代碼如下:
String str = "Hello World"; String result = str.PadLeft(20,'$'); Console.WriteLine(result);

注:PaddRight方法就不說了
23、
作用:移除當前字符串實例從startIndex索引開始的,count個字符
調用代碼如下:
String str = "Hello World"; //移除空格之后的字符串,輸出"Hello" String result = str.Remove(str.IndexOf(' ', 0)); Console.WriteLine(result);

24、
通過傳入的分割符,對當前的字符串實例進行分割,返回字符串數組,可以指定最多返回的子字符串數量(通過count參數),可以過濾空子字符串(通過options參數)
調用代碼如下:
String str = "1$ $2$3$4$ $5"; //根據"$"對str進行分割,最多返回10個子字符串,並且移除結果集空字符串 str.Split("$".ToCharArray(), 10, StringSplitOptions.RemoveEmptyEntries);
String str = "1$$2$3$4$$5"; //根據"$"對str進行分割,最多返回10個子字符串,並且移除結果集空字符串 var result=str.Split("$".ToCharArray(), 10, StringSplitOptions.RemoveEmptyEntries); var en = result.GetEnumerator(); while (en.MoveNext()) { Console.WriteLine(en.Current); }

