前面的數(shù)據(jù)類型介紹中,有提到字符串是屬于引用數(shù)據(jù)的一種,也是編程中最常用的數(shù)據(jù)類型之一。下面來詳細(xì)學(xué)習(xí)記錄一下關(guān)于字符串的內(nèi)容。
1、創(chuàng)建字符串
字符串是引用數(shù)據(jù)類型,聲明變量時(shí),需要使用 string 關(guān)鍵字。
例如:
string str = "This is a string!";
值得注意的是,在 C# 中,字符串類型的變量一定是用雙引號(hào)包裹的一串字符。而字符類型(char)使用單引號(hào)包裹起來的一個(gè)字符。
2、拼接字符串
在 C# 中拼接字符串的方法有很多,下面列舉幾種比較常見的拼接方式:
(1)使用拼接符號(hào)
可以直接使用 + 算術(shù)運(yùn)算符,對字符串進(jìn)行連接。
string s1 = "Hello";
string s2 = "World";
string s3 = s1 + s2;
Console.WriteLine(s3); // HelloWorld
字符串不僅是字符串之間可以拼接,而且可以和所有的數(shù)據(jù)類型進(jìn)行拼接。這是因?yàn)樗袛?shù)據(jù)類型都繼承自 Object 這個(gè)基類,而 Object 中又有 toString 方法。因此,只要子類不重寫這個(gè)方法,理論上來說,所有類型都可以轉(zhuǎn)換為字符串類型。
string s = "asdf";
int i = 3;
float f = 3.2f;
bool b = true;
Console.WriteLine(s + i); // asdf3
Console.WriteLine(s + f); // asdf3.2
Console.WriteLine(s + b); // asdftrue
(2)string.Concat
調(diào)用 string.Concat() 方法,傳入?yún)?shù)即可以完成拼接字符串。參數(shù)的個(gè)數(shù)至少是兩個(gè)。
string s1 = "I ";
string s2 = "\'m ";
int i = 18;
string s = string.Concat(s1, s2, i);
Console.WriteLine(s); // I 'm 18
(3)占位符拼接
string name = "小明";
int age = 22;
string s =string.Format("{0}今年{1}歲", name, age);
Console.WriteLine(s);
// 小明今年22歲
(4)$方式拼接
C# 6.0開始出現(xiàn)的 $ 方式,也可以用來拼接字符串。實(shí)際上其實(shí)就是 string.Format 的簡化版。
string name = "小剛";
int num = 3;
string s = $"{name}蓋了{(lán)num}米高的樓層。";
Console.WriteLine(s);
// 小剛蓋了3米高的樓層。
3、比較字符串
字符串也是可以進(jìn)行比較的,比較方法有如下幾種:
(1)使用比較運(yùn)算符
string s1 = "Woooo";
string s2 = "Wooooa";
bool b = s1 == s2;
// false
(2)string.Compare
string.Compare(s1, s2) 對傳入的兩個(gè)字符串的各個(gè)字符進(jìn)行比較,如果每個(gè)字符的 Unicode 編碼值一樣,那么將會(huì)返回 0;如果比較到某個(gè)字符的編碼值不一樣,前者大則立刻返回 1;否則就返回 -1.
string s1 = "abb";
string s2 = "abc";
string s3 = "caa";
string s4 = "abc";
int n1 = string.Compare(s1, s2); // -1
int n2 = string.Compare(s3, s1); // 1
int n3 = string.Compare(s2, s4); // 0
該方法,還可以傳入第三個(gè)參數(shù),布爾值類型。當(dāng)布爾參數(shù)為 true 的時(shí)候,將不會(huì)區(qū)分大小寫。
string s1 = "abc";
string s2 = "ABC";
int n1 = string.Compare(s1, s2); // -1
int n2 = string.Compare(s1, s2, true); // 0
(3) string.Equals
sting.Equals(s1, s2) 和上面的 string.Compare 很相似,不同的是前者返回的是 true 或者 false。
string s1 = "abc";
string s2 = "bbc";
string s3 = "aac";
string s4 = "abc";
bool b1 = string.Equals(s1, s2); // false
bool b2 = string.Equals(s1, s3); // false
bool b3 = string.Equals(s1, s4); // true
4、占位符
在上面已經(jīng)有占位符的使用展示。
占位符,顧名思義,就是提前給你占位置,并標(biāo)好標(biāo)記。等人來,按照標(biāo)記好的順序坐下。
int n1 = 1;
int n2 = 2;
int n3 = 3;
Console.WriteLine("第{1}個(gè)位置,第{0}個(gè)位置,第{2}個(gè)位置", n1, n2, n3);
// 第2個(gè)位置,第1個(gè)位置,第3個(gè)位置
那么肯定會(huì)有這樣的一種情況,來的路上突然有個(gè)人要加進(jìn)來,但是位置提前安排了,結(jié)果不夠坐,會(huì)發(fā)生什么事情?
int n1 = 1;
int n2 = 2;
int n3 = 3;
int n4 = 4;
Console.WriteLine("第{1}個(gè)位置,第{0}個(gè)位置,第{2}個(gè)位置", n1, n2, n3, n4);
// 第2個(gè)位置,第1個(gè)位置,第3個(gè)位置
很顯然想要投機(jī)取巧的人,只配站著。
如果這個(gè)人不道德的話,不僅中途加入,還插在了第三個(gè)人前頭,那么他成功了。
int n1 = 1;
int n2 = 2;
int n3 = 3;
int n4 = 4;
Console.WriteLine("第{1}個(gè)位置,第{0}個(gè)位置,第{2}個(gè)位置", n1, n2, n4, n3);
// 第2個(gè)位置,第1個(gè)位置,第4個(gè)位置
被插隊(duì)的人就很遺憾只能站著了!
有時(shí)候主辦方很聰明,料到有些人會(huì)不請自來,這時(shí)候會(huì)多安排一些個(gè)位置。可結(jié)果,人來少了,位置還多余了,會(huì)發(fā)生什么呢?
int n1 = 1;
int n2 = 2;
Console.WriteLine("第{1}個(gè)位置,第{0}個(gè)位置,第{2}個(gè)位置", n1, n2);
來的人就發(fā)現(xiàn)還有這么多位置沒有人,看來這主辦方不行啊,這臺(tái)戲肯定不好看,散伙散伙!
從上面可以得出,位置可以少,但不能多;值可以多,但一定不能少,否則就會(huì)拋出以上這樣的異常。
5、轉(zhuǎn)義字符
轉(zhuǎn)移符號(hào) \
轉(zhuǎn)義字符即轉(zhuǎn)移符號(hào)加上特定的字符組成的一個(gè)特殊字符,可以在編程表示一些內(nèi)容:
轉(zhuǎn)義字符 | 作用 |
---|---|
\' | 在字符串中顯示單引號(hào) |
\" | 在字符串中顯示雙引號(hào) |
\t | 制表符,相當(dāng)于 tab 鍵 |
\n | 換行,相當(dāng)于敲下了回車鍵 |
\\ | 在字符串中顯示斜杠符號(hào) |
string s = "小明說:\"我很帥!\"\n小紅說:\"\t\\yue\\\t\"";
Console.WriteLine(s);
6、總結(jié)
復(fù)盤一下上面提到的一些內(nèi)容:
(1)字符串是引用數(shù)據(jù)類型,聲明字符串變量時(shí),需要使用 string。
(2)拼接字符串的方法有:拼接符號(hào)、Concat 方法、占位符使用、$方法使用
(3)比較字符串的方法有:比較運(yùn)算符 ==、Compare 方法、Equals 方法。
(4)占位符:位置可少不可多,值可多不可少。
(5)常用轉(zhuǎn)義字符的介紹。這里再提一句,轉(zhuǎn)義字符是個(gè)字符,雖然它看著是用了兩個(gè)字符組成的,但實(shí)際上它就只是一個(gè)字符。
關(guān)于字符串的學(xué)習(xí)記錄,到這里就已經(jīng)結(jié)束了。