c# string总结
1.string 是引用類(lèi)型,其具有不可變性
我們一般認(rèn)為的將內(nèi)存分為五個(gè)區(qū)域。其中程序員常用的有三個(gè),即棧、堆,靜態(tài)存儲(chǔ)區(qū)域。
其中值類(lèi)型的值存儲(chǔ)在棧中,如int類(lèi)型,而引用類(lèi)型的值存儲(chǔ)在堆中。
string類(lèi)型具有不可變性,一旦其值發(fā)生了改變,就是一個(gè)新的對(duì)象。即每次對(duì)字符串進(jìn)行操作時(shí)就會(huì)產(chǎn)生一個(gè)新的對(duì)象。
等于null 和 等于""的區(qū)別:
?????? string = null; //不分配內(nèi)存
?????? string = "";???? //分配字節(jié)為0的內(nèi)存
2.與stringbuilder的區(qū)別
如果操作少量的數(shù)據(jù),我們可以使用string,如果有大量的字符拼接等操作,我們應(yīng)使用stringbuilder,效率會(huì)提高很多。
StringBuilder 對(duì)象是動(dòng)態(tài)對(duì)象,允許擴(kuò)充它所封裝的字符串中字符的數(shù)量。
如:new StringBuilder("Hello World!", 25);
可以使用讀/寫(xiě) Capacity 屬性來(lái)設(shè)置對(duì)象的最大長(zhǎng)度。
MyStringBuilder.Capacity = 25;
?
3.常見(jiàn)使用方法
1.?比較字符串
比較字符串是指按照字典排序規(guī)則,判定兩個(gè)字符的相對(duì)大小。按照字典規(guī)則,在一本英文字典中,出現(xiàn)在前面的單詞小于出現(xiàn)在后面的單詞。在String類(lèi)中,常用的比較字符串的方法包括Compare、CompareTo、CompareOrdinal以及Equals,下面進(jìn)行詳細(xì)介紹。
Compare方法是String類(lèi)的靜態(tài)方法,用于全面比較兩個(gè)字符串對(duì)象,包括6種重載方法。CompareTo方法將當(dāng)前字符串對(duì)象與另一個(gè)對(duì)象做比較,其作用與Compare類(lèi)似,返回值也相同。CompareTo與Compare相比,區(qū)別在于:CompareTo不是靜態(tài)方法,可以通過(guò)一個(gè)String對(duì)象調(diào)用;CompareTo沒(méi)有重載形式,只能按照大小寫(xiě)敏感方式比較兩個(gè)整串。
Equals方法用于方便地判定兩個(gè)字符串是否相同,有兩種重載形式:
public?boolEquals(string)
public?static?boolEquals(string,string)
如果兩個(gè)字符串相等,Equals()返回值為T(mén)rue;否則,返回False。
String支持兩個(gè)比較運(yùn)算符“==”、“!=”,分別用于判定兩個(gè)字符是否相等和不等,并區(qū)分大小寫(xiě)。相對(duì)于上面介紹的方法,這兩個(gè)運(yùn)算符使用起來(lái)更加直觀和方便。下例中,使用“==”、“!=”對(duì)“Hello”和“World”進(jìn)行比較。
2.?定位字符串和子串
定位子串是指在一個(gè)字符串尋找其中包含的子串或者某個(gè)字符,在String類(lèi)中,常用的定位子串和字符的方法包括StartWith/EndsWith、IndexOf/LastIndexOf以及IndexOfAny?/LastIndexOf下面進(jìn)行詳細(xì)介紹。
StartWith/EndsWithStartWith方法
可以判定一個(gè)字符串對(duì)象是否以另一個(gè)子字符串開(kāi)頭,如果是返回True;否則返回False。其定義為:
Public?bool?StartsWith(string?value)?//其中,參數(shù)value即待判定的子字符串。
IndexOf/LastIndexOf
IndexOf方法用于搜索一個(gè)字符串,某個(gè)特定的字符或子串第一次出現(xiàn)的位置,該方法區(qū)分大小寫(xiě),并從字符串的首字符開(kāi)始以0計(jì)數(shù)。如果字符串中不包含這個(gè)字符或子串,則返回-1。共有如下6種重載形式。
定位字符:
?
?
定位子串:
?
?
在上述重載形式中,其參數(shù)含義如下:
Value:待定位的字符或者子串。
startIndex:在總串中開(kāi)始搜索的起始位置。
Count:在總串中從起始位置開(kāi)始搜索的字符數(shù)。
IndexOfAny/LastIndexOfAnyIndexOfAny方法
其功能同IndexOf類(lèi)似,區(qū)別在于,可以搜索在一個(gè)字符串中,出現(xiàn)在一個(gè)字符數(shù)組中的任意字符第一次出現(xiàn)的位置。同樣,該方法區(qū)分大小寫(xiě),并從字符串的首字符開(kāi)始以0計(jì)數(shù)。如果字符串中不包括這個(gè)字符或子串,則返回-1。IndexOfAny有3種重載形式:
?
?
在上述重載形式中,參數(shù)含義如下:
anyOf:待定位的字符數(shù)組,方法將返回這個(gè)數(shù)組中任意一個(gè)字符第一次出現(xiàn)的位置。
startIndex:在總串中開(kāi)始搜索的起始位置。
Count:在總串中從起始位置開(kāi)始搜索的字符數(shù)。
3.?格式化字符串
Format方法用于創(chuàng)建格式化的字符串以及連接多個(gè)字符串對(duì)象。Foramt方法也有多個(gè)重載形式,最常用的為:
public?static?string?Format(string?format,params?object[]?args);
其中,參數(shù)format用于指定返回字符串的格式,而args為一系列變量參數(shù)。可以通過(guò)下面的實(shí)例來(lái)掌握其使用方法。
newStr="";
newStr=String.Format("{0},{1}!",strA,strB);
Console.WriteLine(newStr);//Hello,World!
在format參數(shù)中包含一些用大括號(hào)括起來(lái)的數(shù)字,如{0}、{1},這些數(shù)字分別一一對(duì)應(yīng)于args參數(shù)數(shù)組中的變量。在生成結(jié)果字符串時(shí),將使用這些變量代替{i}。需要說(shuō)明的是,這些變量并不要求必須為String類(lèi)型。在特定的應(yīng)用中,Format方法非常方便。例如,想要輸出一定格式的時(shí)間字符串,便可以使用Format方法,如下面代碼所示。
newStr=String.Format("CurrentTime={0:yyyy-MM-dd}",System.DateTime.Now);
Console.WriteLine(newStr);//形如:2006-05-19
其中,格式字符串“yyyy-MM-dd”指定返回時(shí)間的格式形如“2006-05-19”,其定義參考System.Globalization.DateTimeFormatInfo類(lèi)。
4.?連接字符串
Concat方法
Concat方法用于連接兩個(gè)或多個(gè)字符串。Concat方法也有多個(gè)重載形式,最常用的為:public?static?string?Concat(paramsstring[]?values);其中,參數(shù)values用于指定所要連接的多個(gè)字符串,可以通過(guò)下面的實(shí)例來(lái)掌握其使用方法。
//ConcatnewStr="";
newStr=String.Concat(strA,"?",strB);
Console.WriteLine(newStr);//“Hello?World"
Join方法
Join方法利用一個(gè)字符數(shù)組和一個(gè)分隔符串構(gòu)造新的字符串。常用于把多個(gè)字符串連接在一起,并用一個(gè)特殊的符號(hào)來(lái)分隔開(kāi)。Join方法的常用形式為:public?static?string?Join(stringseparator,string[]?values);其中,參數(shù)value為指定的分隔符,而values用于指定所要連接的多個(gè)字符串?dāng)?shù)組,下例用“^^”分隔符把“Hello”和“World”連起來(lái)。
//Join
newStr="";
String[]?strArr={strA,strB};
newStr=String.Join("^^",strArr);
Console.WriteLine(newStr);//"Hello^^World"
連接運(yùn)算符“+”
String支持連接運(yùn)算符“+”,可以方便地連接多個(gè)字符串,例如,下例把“Hello”和“World”連接起來(lái)。
newStr="";
newStr=strA+strB;
Console.WriteLine(newStr);//"HelloWorld"
5.?分隔字符串
使用前面介紹的Join方法,可以利用一個(gè)分隔符把多個(gè)字符串連接起來(lái)。反過(guò)來(lái),使用Split方法可以把一個(gè)整串,執(zhí)照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串,按照某個(gè)分隔符,分裂成一系列小的字符串。例如,把整串“Hello^^World”按照字符“^”進(jìn)行分裂,可以得到3個(gè)小的字符串,即“Hello”、“”(空串)和“World”。
Split有多個(gè)重載形式,最常用的形式為:
public?string[]?Split(paramschar[]?separator);
其中,參數(shù)separator數(shù)組包含分隔符。下例把“Hello^^World”進(jìn)行分裂
//Split
newStr="Hello^^World";
char[]?separator={'^'};
String[]?splitStrings=new?String[100];
splitStrings=newStr.Split(separator);
inti=0;
while(i<splitStrings.Length)
{
Console.WriteLine("item{0}:{1}",i,splitStrings[i]);
i++;
}
輸出結(jié)果如下:Item0:Hello?Item1:??Item2:World
6.?插入和填充字符串
String類(lèi)包含了在一個(gè)字符串中插入新元素的方法,可以用Insert方法在任意插入任意字符。Insert方法用于在一個(gè)字符串的指定位置插入另一個(gè)字符串,從而構(gòu)造一個(gè)新的串。Insert方法也有多個(gè)重載形式,最常用的為:
public?string?Insert(intstartIndex,stringvalue);
其中,參數(shù)startIndex用于指定所要插入的位置,從0開(kāi)始索引;value指定所要插入的字符串。下例中,在“Hello”的字符“H”后面插入“World”,構(gòu)造一個(gè)串“HWorldello”。
//Insert
newStr="";
newStr=strA.Insert(1,strB);
Console.WriteLine(newStr);//"HWorldello"
7.?刪除和剪切字符串
Remove方法
Remove方法從一個(gè)字符串的指定位置開(kāi)始,刪除指定數(shù)量的字符。最常用的形式為:
public?string?Remove(intstartIndex,intcount);
其中,參數(shù)startIndex用于指定開(kāi)始刪除的位置,從0開(kāi)始索引;count指定刪除的字符數(shù)量。下例中,把“Hello”中的“ell”刪掉。
//RemovenewStr="";newStr=strA.Remove(1,3);
Console.WriteLine(newStr);//"Ho"
Trim/TrimStart/TrimEnd
Trim方法
若想把一個(gè)字符串首尾處的一些特殊字符剪切掉,如去掉一個(gè)字符串首尾的空格等,可以使用String的Trim()方法。其形式如下:
public?string?Trim();
public?string?Trim(paramschar[]?trimChars);
其中,參數(shù)trimChars數(shù)組包含了指定要去掉的字符,如果缺省,則刪除空格符號(hào)。下例中,實(shí)現(xiàn)了對(duì)“@Hello#$”的凈化,去掉首尾的特殊符號(hào)。
//Trim
newStr="";
char[]?trimChars={'@','#','$','?'};
String?strC="@Hello#?$";
newStr=strC.Trim(trimChars);
Console.WriteLine(newStr);//"Hello"
另外,同Trim類(lèi)似,TrimStart和TrimEnd分別剪切掉一個(gè)字符串開(kāi)頭和結(jié)尾處的特殊字符。
8.?復(fù)制字符串
String類(lèi)包括了復(fù)制字符串方法Copy和CopyTo,可以完成對(duì)一個(gè)字符串及其一部分的復(fù)制操作。
Copy方法
若想把一個(gè)字符串復(fù)制到另一個(gè)字符數(shù)組中,可以使用String的靜態(tài)方法Copy來(lái)實(shí)現(xiàn),其形式為:public?string?Copy(stringstr);其中,參數(shù)str為需要復(fù)制的源字符串,方法返回目標(biāo)字符串。
CopyTo方法
CopyTo方法可以實(shí)現(xiàn)Copy同樣的功能,但功能更為豐富,可以復(fù)制字符串的一部分到一個(gè)字符數(shù)組中。另外,CopyTo不是靜態(tài)方法,其形式為:
public?void?CopyTo(intsourceIndex,char[]?destination,intdestinationIndex,intcount);
其中,參數(shù)sourceIndex為需要復(fù)制的字符起始位置,destination為目標(biāo)字符數(shù)組,destinationIndex指定目標(biāo)數(shù)組中的開(kāi)始存放位置,而count指定要復(fù)制的字符個(gè)數(shù)。
下例中,把strA字符串“Hello”中的“ell”復(fù)制到newCharArr中,并在newCharArr中從第2個(gè)元素開(kāi)始存放。
char[]?newCharArr=new?char[100];
strA.CopyTo(2,newCharArr,0,3);
Console.WriteLine(newCharArr);//"Hel"
9.?替換字符串
要替換一個(gè)字符串中的某些特定字符或者某個(gè)子串,可以使用Replace方法來(lái)實(shí)現(xiàn),其形式為:
?public?string?Replace(char?oldChar,?char?newChar);
?public?string?Replace(string?oldValue,?string?newValue);
?其中,參數(shù)oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串。下例把“Hello”通過(guò)替換變?yōu)椤癏ero”。
?//Replace
?newStr=strA.Replace("ll","r");
?Console.WriteLine(newStr);
10.?更改大小寫(xiě)
String提供了方便轉(zhuǎn)換字符串中所有字符大小寫(xiě)的方法ToUpper和ToLower。這兩個(gè)方法沒(méi)有輸入?yún)?shù),使用也非常簡(jiǎn)單。下例首先把“Hello”轉(zhuǎn)換為“HELLO”,然后再變?yōu)樾?xiě)形式“hello”。
本節(jié)介紹了最常用的String類(lèi),并從比較、定位子串、格式化、連接、分裂、插入、刪除、復(fù)制、大小寫(xiě)轉(zhuǎn)換10個(gè)方面介紹了其方法。之所以稱(chēng)String對(duì)象為靜態(tài)串,是因?yàn)橐坏┒x一個(gè)String對(duì)象,就是不可改變的。在使用其方法(如插入、刪除操作)時(shí),都要在內(nèi)在中創(chuàng)建一個(gè)新的String對(duì)象,而不是在原對(duì)象的基礎(chǔ)上進(jìn)行修改,這就需要開(kāi)辟新的內(nèi)存空間。如果需要經(jīng)常進(jìn)行串修改操作,使用String類(lèi)無(wú)疑是非常耗費(fèi)資源的,這時(shí)需要使用StringBuilder類(lèi)。
11.?包含轉(zhuǎn)義字符使用”@”
如果要使用轉(zhuǎn)義字符的話(huà),需要在字符前加上”\”,而C#提供了一種新的機(jī)制,使用”@”.在”@”后的字符串都看作是原意,不會(huì)解釋為轉(zhuǎn)義字符串.并且以”@”開(kāi)頭的字符串支持回車(chē)換行的顯示方式
12.刪除某個(gè)相同的字符
string a="a,a,a,";
刪除所以字符','
a.Replace(",", "");刪除最后一個(gè)字符
方法一(常用):
??????????????????? a = a.Substring(0, a.Length - 2);
方法二(推薦):
??????????????????? a = a.TrimEnd(',');
Trim()、TrimEnd()、TrimStart()的參數(shù)
13.計(jì)算某個(gè)相同字符的個(gè)數(shù)
string?str?=?"1,2,3,4,5,6";方法一
int?count?=?str.Count(ch?=>?ch?==?',');
方法二
Regex.Matches(str,@",").Count? 方法三 str.Split(',').Length-1 參考: http://www.cnblogs.com/hunternet/p/4712661.html http://www.cnblogs.com/hackpig/archive/2010/02/15/1668357.html http://blog.csdn.net/angelazy/article/details/8501776
總結(jié)
以上是生活随笔為你收集整理的c# string总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: bacula 的安装、配置和运行
- 下一篇: GHOST系统时出现“A:\GHOSTE
