好,首先,其實沒有一百種不要擔心XDDD浮誇一下浮誇一下XDDD
說到陣列,我們最常使用的陣列非字串莫屬了!!
字串就是字元的陣列
~
之後開始接觸ASP.NET網頁部分,可能常常需要對字串進行處理(組合、切割、取代、擷取、尋找、修改),先來介紹幾個字串常用的方法:
使用"+"號:
常用
string a = "賀阿! ";
string b = "我!要!成!為!工!程!師!";
Console.WriteLine(a+b);
Console.ReadKey();
輸出結果:
string format()常用
→詳細介紹請看Day14這篇
String.Concat()
String.Concat(字串a,字串b)
string a = "賀阿! ";
string b = "我!要!成!為!工!程!師!";
Console.WriteLine(String.Concat(a,b));
Console.ReadKey();
輸出結果:
String.Join()
String.Join(String(用來連結的字串), String[](字串陣列,被連結的字串們))
string[] array = { "賀阿!", "我!要!成!為!工!程!師!" };
Console.WriteLine(String.Join("**********",array));//用*連接兩字串
Console.ReadKey();
輸出結果:
StringBuilder.Append()
將字串a建立一個StringBuilder物件,並使用Append("要加入的字串")方法將字串連接
注意StringBuilder物件跟字串不一樣喔
StringBuilder stringBuilder = new StringBuilder("賀阿!");
stringBuilder.Append("我!要!成!為!工!程!師!");
Console.WriteLine(stringBuilder);
Console.ReadKey();
輸出結果:
使用 Split() 這個方法,用來分割的字元不會
存在在分割結果。常用
使用單個字元切割
Split('要用來切割的字元')
string b = "我!要!成!為!工!程!師!";
string[] sArray = b.Split('!');//以字元!作為分隔符號
foreach (var item in sArray)
Console.WriteLine(item);
Console.ReadKey();
輸出結果:
使用多個字元切割
Split(char[]{'分隔字元','分隔字元'})
string b = "我!要!成!為!工~程~師!";
string[] sArray = b.Split(new char[2] {'!','~'});//分別以!還有~y作為分隔符號
foreach (var item in sArray)
Console.WriteLine(item);
Console.ReadKey();
輸出結果:
使用多個字串分割
Split(用來切割的字串陣列String[], StringSplitOptions)
string b = "我!要!成!為!工~程~師!";
string[] sArray = b.Split(new string[] {"成","程"}, StringSplitOptions.RemoveEmptyEntries);
//RemoveEmptyEntries代表不回傳空字串的元素
foreach (var item in sArray)
Console.WriteLine(item);
Console.ReadKey();
輸出結果:
使用RegularExpressions正則表達式除非使用RegularExpressions,不然不建議這樣寫
Regex.Split(要切割的字串,"要用來切割的字串")
string b = "我!要!成!為!工!程!師!";
string[] sArray = Regex.Split(b,"為!");
foreach (var item in sArray)
Console.WriteLine(item);
Console.ReadKey();
輸出結果:
Replace(被取代的字元/字串,新的字元/字串)常用
string b = "我!要!成!為!工~程~師!";
string c =b.Replace("我", "Cynthia");//用Cynthia把我取代掉
Console.WriteLine(c);
Console.ReadKey();
輸出結果:
複習一下index指的位置
Substring(抓取起始字串index):這個會從某個字串開始一直到最後常用
Substring(Int32)
string b = "我要成為工程師";
string c = b.Substring(3);//從index=3開始抓,所以是從"為"開始
Console.WriteLine(c);
Console.ReadKey();
輸出結果:
Substring(抓取起始字串index(int),抓的字串長度(int)):指定抓取起點與抓取長度常用
Substring(Int32,Int32)
string b = "我要成為工程師";
string c = b.Substring(3,2);//從index=3開始抓,往後抓2個
Console.WriteLine(c);
Console.ReadKey();
輸出結果:
String.StartsWith(string要查的字串):看字串是否以括號內的值開頭,傳回值為布林值boolean(T/F)
String.EndsWith(string要查的字串):看字串是否以括號內的值結尾,傳回值為布林值boolean(T/F)
string b = "我要成為工程師";
bool c = b.StartsWith("我");
bool d = b.EndsWith("我");
Console.WriteLine(c);
Console.WriteLine(d);
Console.ReadKey();
輸出結果:
概念二:找到字串的位置
IndexOf("要尋找的內容"):找到這個字元或字串第一次出現的索引位置,如果找不到會回傳-1。常用
LastIndexOf("要找的內容"):找到這個字元或字串最後一次出現的索引位置,如果找不到會回傳-1
因為第一個位置是0,所以if(IndexOf()>-1)表示存在
string b = "我要成為工程師我";
int c = b.IndexOf("我");
int d = b.LastIndexOf("我");
Console.WriteLine(c);
Console.WriteLine(d);
Console.ReadKey();
輸出結果:
使用正則運算式RegularExpressions的IsMatch()除非使用RegularExpressions,不然不建議這樣寫
IsMatch(被搜尋的字串,要比對的字串)
string b = "我要成為工程師我";
bool c = Regex.IsMatch(b, "我");//看"我"在不在b字串裡
Console.WriteLine(c);
Console.ReadKey();
String.Trim(Char[]):移除開頭和結尾的指定字元。
String.TrimStart(Char[]):移除開頭的指定字元。
String.TrimEnd(Char[]):移除結尾的指定字元。
string b = " 我要成為工程師我 ";
string c = "我要成為工程師!";
Console.WriteLine(b.Trim());//移除前後空白
Console.WriteLine(b.TrimStart());//移除前面空白
Console.WriteLine(b.TrimEnd());//移除後面空白
Console.WriteLine(c.Trim('!'));//移除前後!
輸出結果:
Remove("從第幾個開始移除"):Remove(Int)
Remove("從第幾個開始移除",總共移除幾個):Remove(Int,Int)
string c = "我要成為工程師!";
Console.WriteLine(c.Remove(2));
Console.WriteLine(c.Remove(2,2));
Console.ReadKey();
輸出結果:
插入字串
String.Insert("從第幾個index插入", "要插入的字串"):String.Insert(Int32, String)
string c = "我要成為工程師!";
Console.WriteLine(c.Insert(1,"!Cynthia"));
Console.ReadKey();
輸出結果:
如果不是用正規表達式的規則字串的話,一般只會用 string.Split()、string.Contains() 或 string.IndexOf() 而已,不會去用 Regex.IsMatch() 或是 Regex.Split(),因為命名空間不同,而且容易使別人搞混 (尤其是初學者)。
另外,StringBuilder 和 string 雖然很像但是不同的東西喔。
如果不是用正規表達式的規則字串的話,一般只會用 string.Split()、string.Contains() 或 string.IndexOf() 而已,不會去用 Regex.IsMatch() 或是 Regex.Split(),因為命名空間不同,而且容易使別人搞混 (尤其是初學者)。
我雖然知道他們不同,但我這初學者顯然寫了讓人容易搞混的東西XD我立馬備註一下XD也提醒自己別亂用XD
另外,StringBuilder 和 string 雖然很像但是不同的東西喔。
好的!感謝大大提醒!看來我這樣寫會讓人誤會,這我也在內文備註一下XD