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