C#编程(四十四)----------string和stringbuilder
System.String類
首先string類是靜態的,System.String是最常用的字符串操作類,可以幫助開發者完成絕大部分的字符串操作功能,使用方便.
1.比較字符串
比較字符串是指按照字典排序規則,判定兩個字符的相對大小.按照點點規則,在一本英文字典中,出現在前面的單詞小于出現在后面的單詞.在string類中,常用的比較字符串的方法包括Compare,CompareTo,CompareOrdinal以及Equals,下面進行詳細的介紹.
Compare()方法是string類的靜態方法,用于全面比較兩個兩個字符串對象,包括6種重載方法.CompareTo()方法將當前字符串對象與另一個?對象做比較,其作用與Compare類似,返回值也相同.CompareTo與Compare相比,區別在于:CompareTO不是靜態方法,可以通過一個string對象調用;CompareTo沒有重載形式,只能按照大小寫敏感方法比較兩個整串.
Equals()方法用于方便的判斷兩個字符串是否相同,有兩種重載形式:
public?bool?Equals(string?str)
public?static?bool?Equals(string?str1,string?str2);
如果兩個字符串相等,Equals()返回值為true;否則,返回False.
string支持兩個比較運算符”==”和”!=”,分別用于判定兩個字符串是否相等和不等,并區分大小寫.相對于上面介紹的方法,這兩個運算符使用起來更加直觀和方便.
?
2.定位字符串和子串
定位子串是指在一個字符串尋找其中包含的子串或者某個字符,在string類中,常用的定位子串和字符的方法包括:StartsWith(),EndsWith(),IndexOf(),LastIndxOf(),IndexOfAny()以及LastIndexOf(),下面進行詳細介紹:
StartsWith()/EndsWith()方法
可以判定一個字符串對象是否以另一個子做富川開頭,如果是返回True;否則返回false,其定義為:public?bool?StartsWith(string?value)?//參數value即待判定的子字符串.
?
IndexOf()/LastIndexOf()
IndexOf()方法用于搜索一個字符串,某個特定的字符串或子串第一次出現的位置,該方法區分大小寫,并從字符串的首字符以0技術.如果字符串中不包含這個字符或子字符串,則返回-1.共有如下6中重載形式:
定位子串:
int?IndexOf(char?value)
int?IndexOf(char?value?,?int?StartIndex)
int?IndexOf(char?value,int?startIndex?int?count)
定位子串:
int?IndexOf(stringvalue)
int?IndexOf(string?value?,?int?StartIndex)
int?IndexOf(stringvalue,int?startIndex?int?count)
在上述的重載行駛中,其參數含義如下
value:待定位的字符或者子串
startIndex:在總串中開始搜索的起始位置
Count:在總串中從起始位置?開始搜索的字符數.
?
IndexOfAny()/LastIndexOfAny()
其功能同IndexOf類似,其區別在于,可以搜索在一個字符串中,出現在一個字符串數組中的任意字符第一次出現的位置.同樣,該方法區分大小寫,并從字符串的首字符開始以0技術.如果字符串中不包括這個字符或子串,則返回-1.
同IndexOfAny類似,LastIndexOfAny用于搜索在一個字符串中,出現在一個字符數組中任意字符最后一次出現的位置。
?
案例:
????????????string?s?=?"hello";
????????????char[]?arr?=?{?'H','e','l'};
????????????int?i1?=?s.IndexOfAny(arr);
????????????int?i2?=?s.LastIndexOfAny(arr);
????????????Console.WriteLine("IndexOfAny的結果是?:{0}??\nLastIndexOfAny的結果是?:{1}",i1,i2);
????????????Console.ReadKey();
?
.IndexOfAny有三種重載形式:
int?IndexOfAny(char?[]?anyOf)
int?IndexOfAny(char?[]?anyOf,int?startIndex)
int?IndexOfAny(char?[]?anyOf,int?startIndex,int?count)
在上述重載行駛中,其參數含義如下:
anyOf:待定位的字符或者子串,方法將返回這個數組中任意一個字符第一次出現的位置
startIndex:在總串中開始搜索得起始位置
Count:在總串中從起始位置開始搜索的字符串
?
3.格式化字符串
Format()方法用于創建格式化的字符串以及連接多個字符串對象.FOrmat()方也有多個重載形式,最常用的是:
public?static?string?Format(string?format,params?object?[]?args);
其中,參數format用于指定返回字符串的格式,而args為一系列變量參數.可以通過下面的實例來掌握其用法.
????????????string?strA?=?"hello",?strB?=?"world",newStr="";
????????????newStr?=?string.Format("{0},{1}",strA,strB);
????????????Console.WriteLine(newStr);
在format參數中包含一些用大括號括起來的數字,如{0},{1},這些數字分別一一對應于args參數數組中的變量.在生成結構字符串時,將使用這些變量代替{i}.需要說明的是,這些變量并不是非得為string類型.在特定的應用中,format方法非常方便.例如,要輸出一定個事的瞬間字符串,便可以使用format()方法,代碼如下:
????????????newStr?=?string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);
????????????Console.WriteLine(newStr);
?
其中,格式字符串”yyyy:MM:dd”指定返回時間的格式形如”2015:7:21”.
?
4.連接字符串
Concat()方法用戶諒解兩個或多個字符串,Concat()方法也有多個重載形式,最常用的為:public?static?Concat(params?string?[]?values);//其中values用于指定索要連接的多個字符串,可以死通過下面的實例來掌握其使用方法.
????????????string?newStr?=?string.Concat("hello","?","world");
????????????Console.WriteLine(newStr);
?
Join()方法利用一個字符數組和一個分割字符串構造新的字符串.常用于把多個字符串連接在一起,并用一個特殊的符號來分隔開.Join()方法的常用形式:public?static?string?Join(string?separator?,string?[]?values);//其中,參數separator?為指定的分隔符,而values用于指定所要連接的多個字符串數組,案例:
????????????string?strA?=?"hello",?strB?=?"world",newStr="";
????????????//newStr?=?string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);
????????????//string?newStr?=?string.Concat("hello","?","world");
????????????string?[]strArr={strA,strB};
//使用^^分隔字符串數組
????????????newStr?=?string.Join("^^",strArr);
????????????Console.WriteLine(newStr);
????????????Console.ReadKey();
?
?
連接運算符”+”
string支持連接運算符”+”,可以方便的連接多個字符串,例如,下面把”hello”和”world”連接起來;
????????????string?newStr?=?"hello"?+?",world";
????????????Console.WriteLine(newStr);
5.分割字符串
使用前面介紹的Join方法,可以利用一個分隔符把多個字符串連接起來.反過來,使用Split方法可以把一個整串,按照某個分隔符,分裂成一系列小的字符串.例如,把整串”hello^^world”按照字符”^”進行分割,可以得到三個小的字符串,即”hello”,””(空串),”world”.
Split()方法有多個重載形式,最常用的形式為:
public?string?[]?Split(params?char?[]?separator)
其中參數separator數組包含分隔符.下例把”hello^^world”進行分割:
????????????string?newStr?=?"hello^^world";
????????????char[]?separator?=?{?'^'};
????????????string[]?splitStrings?=?new?string[100];
????????????splitStrings?=?newStr.Split(separator);
????????????int?i?=?0;
????????????while?(i<splitStrings.Length)
????????????{
????????????????Console.WriteLine("item:{0}??{1}",i,splitStrings[i]);
????????????????i++;
????????????}
?
?
?
6.插入和填充字符串
string類包含了在一個字符串中插入新元素的方法,可以用insert()方法在任意位置插入任意字符.Insert()方法用于在一個字符串的指定位置插入另一個字符串,從而構造一個新的串,Insert()方法也有多個蟲子形式,最常用的是:
public?string?Insert(int?startIndex,?string?value);
其中,參數startIndex用于指定所要插入的位置,從0開始索引;value指定所要插入的字符串.
下例在”hello”的字符”h”后面插入”world”,最后的結果為”hworldello”:
????????????string?newStr?=?"";
????????????newStr?=?"hello".Insert(1,?"world");
????????????Console.WriteLine(newStr);
?
?
7.刪除和剪切字符串
Remove()方法從一個字符串的指定位置開始,刪除指定數量的字符.最常用的形式為:
public?string?Remove(int?startIndex,int?count);
其中,參數startIndex用于指定開始刪除的位置,從0開始索引;count指定刪除的字符數量.下例中,將”hello”中的”ell”刪除:
????????????string?newStr?=?"hello";
????????????newStr?=?newStr.Remove(1,?3);
????????????Console.WriteLine(newStr);
?
Trim()方法
若想把一個字符串首尾處的一些特殊字符刪除,如去掉一個字符串首尾的空格等,可以使用string的Trim()方法.形式:
public?string?Trim();
public?string?Trim(params?char?[]?trimChars);
其中,參數trimChars數組包含了指定要去除的字符,如果缺省,則刪除空格符號.下例中,實現了對”@hello#$”的凈化.
????????????char[]?trimChars?=?{?'@','#','$'};
????????????string?str?=?"@hello#$";
????????????string?newStr?=?str.Trim(trimChars);
????????????Console.WriteLine(newStr);
8.復制字符串
string類包含了復制字符串方法Copy和CopyTo,可以完成對一個字符串及其一部分的復制操作.
Copy()方法可以把一個字符串復制到另一個字符數組中,形式為:public?string?Copy(string?str);其中,參數str為需要復制的源字符串,方法返回目標字符串.
CopyTo()方法可以實現Copy同樣的功能,但功能更為豐富,可以賦值字符串的一部分到一個字符數組中.另外CopyTo不是靜態方法,其形式為:
public?void?CopyTo(int?sourceIndex,char?[]?destination,int?destinationIndex,int?count);
其中,參數sourceIndex為需要復制的字符起始位置,destination為目標字符數組,destinationIndex指定目標數組中的開始存放位置,而count指定要復制的字符個數.
案例:
????????????char[]?newCharArr?=?new?char[100];
????????????"hello".CopyTo(2,?newCharArr,?0,?3);
????????????Console.WriteLine(newCharArr);
?
分析:把”hello”中的llo復制到newCharArr中.
?
?
9.替換字符串
要替換一個字符串中的某些特定字符或者某個子串,可以使用Replcace()方法來實現,其形式為:
public?string?Replace(char?oldChar,char?newStr);
public?string?Replac(string?oldValue,string?newValue);
其中,參數oldChar和oldValue為待替換的字符和子串,而newChar和newValue為替換后的新字符和新子串:
????????????string?newStr?=?"hello".Replace("ll",?"r");
????????????Console.WriteLine(newStr);
?
?
10.更改大小寫:
string提供了方便轉換字符串中所有字符大小寫的方法ToUpper和TOLower.這兩個方法沒有輸入參數,使用也非常方便.案例:
????????????Console.WriteLine("hello".ToUpper());
????????????Console.WriteLine("HELLO".ToLower());
?
?
?
總結:本節介紹了最常用的String類,并從比較、定位子串、格式化、連接、分裂、插入、刪除、復制、大小寫轉換10個方面介紹了其方法。之所以稱String對象為靜態串,是因為一旦定義一個String對象,就是不可改變的。在使用其方法(如插入、刪除操作)時,都要在內在中創建一個新的String對象,而不是在原對象的基礎上進行修改,這就需要開辟新的內存空間。如果需要經常進行串修改操作,使用String類無疑是非常耗費資源的,這時需要使用StringBuilder類。
創建新的string對象相關的系統開銷可能會非常昂貴.如果要修改字符串而不創建新的對象,則可以使用System.StringBuikder類.例如,當在一個循環中將許多字符串連接在一起時,使用StringBuilder類可以提升性能.
通過用一個重載的構造函數方法初始化變量,可以創建StringBuilder類的新實例,示例如下:
StringBuilder?sb=new?StringBuilder(“hello,world”);?
?
設置容量和長度
雖然StringBuilder?對象是動態對象,允許擴充它所封裝的字符串中字符的數量,但是你可以為它容納的最大字符數指定一個值,此值稱為該對象的容量,不應將它與當前StringBuilder?對象容納的字符串長度混淆在一起.例如,可以創建StringBuilder類的帶字符串”hello”(長度為5)的一個新實例,同時可以指定該對象的最大容量為25.當修改StringBuilder時,在達到容量之前,他不會為其自己重新分配空間.當達到容量時,將自動分配新的空間且容量翻倍.可以使用重載的構造函數之一來指定StringBuilder類的容量,下例指定可以將StringBuilder對象擴充到最大25個空白.
StringBuilder?sb=new?StringBuilder(“hello,world”,25);?
?
另外,可以使用讀/寫Capacity屬性來設置對象的最大長度.下例代碼使用Capacity屬性來定義對象的最大長度.
sb.Capacity=25;
?
EnsureCapacity方法可用來檢查當前StringBuilder的容量
也可以查看或設置Length屬性.如果將Length屬性設置為大于Capacity屬性的值,則自動將Capacity屬性更改為與Length屬性相同的值.如果將Length屬性設置為小于當前StringBuilder?對象內的字符串長度的值,則會縮短該字符串.
?
修改?StringBuilder?字符串
方法名?使用
StringBuilder.Append?將信息追加到當前?StringBuilder?的結尾。
StringBuilder.AppendFormat?用帶格式文本替換字符串中傳遞的格式說明符。
StringBuilder.Insert?將字符串或對象插入到當前?StringBuilder?對象的指定索引處。
StringBuilder.Remove?從當前?StringBuilder?對象中移除指定數量的字符。
StringBuilder.Replace?替換指定索引處的指定字符。
?
?
Append?方法可用來將文本或對象的字符串表示形式添加到由當前?StringBuilder?對象表示的字符串的結尾處。以下示例將一個?StringBuilder?對象初始化為“Hello?World”,然后將一些文本追加到該對象的結尾處。將根據需要自動分配空間。
StringBuilder?MyStringBuilder?=?new?StringBuilder("Hello?World!");?MyStringBuilder.Append("?What?a?beautiful?day.");?Console.WriteLine(MyStringBuilder);
此示例將?Hello?World!?What?a?beautiful?day.?顯示到控制臺。
AppendFormat
AppendFormat?方法將文本添加到?StringBuilder?的結尾處,而且實現了?IFormattable?接口,因此可接受格式化部分中描述的標準格式字符串。可以使用此方法來自定義變量的格式并將這些值追加到?StringBuilder?的后面。以下示例使用?AppendFormat?方法將一個設置為貨幣值格式的整數值放置到?StringBuilder?的結尾。
int?MyInt?=?25;?StringBuilder?MyStringBuilder?=?new?StringBuilder("Your?total?is?");?MyStringBuilder.AppendFormat("{0:C}?",?MyInt);?Console.WriteLine(MyStringBuilder);
此示例將?Your?total?is?$25.00?顯示到控制臺。
Insert
Insert?方法將字符串或對象添加到當前?StringBuilder?中的指定位置。以下示例使用此方法將一個單詞插入到?StringBuilder?的第六個位置。
StringBuilder?MyStringBuilder?=?new?StringBuilder("Hello?World!");?MyStringBuilder.Insert(6,"Beautiful?");?Console.WriteLine(MyStringBuilder);
此示例將?Hello?Beautiful?World!?顯示到控制臺。
Remove
可以使用?Remove?方法從當前?StringBuilder?中移除指定數量的字符,移除過程從指定的從零開始的索引處開始。以下示例使用?Remove?方法縮短?StringBuilder。
StringBuilder?MyStringBuilder?=?new?StringBuilder("Hello?World!");?MyStringBuilder.Remove(5,7);?Console.WriteLine(MyStringBuilder);
此示例將?Hello?顯示到控制臺。
Replace
使用?Replace?方法,可以用另一個指定的字符來替換?StringBuilder?對象內的字符。以下示例使用?Replace?方法來搜索?StringBuilder?對象,查找所有的感嘆號字符?(!),并用問號字符?(?)?來替換它們。
StringBuilder?MyStringBuilder?=?new?StringBuilder("Hello?World!");?MyStringBuilder.Replace(’!’,?’?’);?Console.WriteLine(MyStringBuilder);
轉載于:https://www.cnblogs.com/android-blogs/p/6603633.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的C#编程(四十四)----------string和stringbuilder的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么破bios密码 破解BIOS密码的方
- 下一篇: day58-activiti 02-历史