C# 學(xué)習(xí)第8章操作字符和字符串_第1頁
C# 學(xué)習(xí)第8章操作字符和字符串_第2頁
C# 學(xué)習(xí)第8章操作字符和字符串_第3頁
C# 學(xué)習(xí)第8章操作字符和字符串_第4頁
C# 學(xué)習(xí)第8章操作字符和字符串_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第8 8章章 操作字符和字符串操作字符和字符串C#對(duì)于文字的處理大多是通過對(duì)字符和字符串的操作對(duì)于文字的處理大多是通過對(duì)字符和字符串的操作來進(jìn)行的,同時(shí)還為開發(fā)人員提供了功能強(qiáng)大的函數(shù)。雖然來進(jìn)行的,同時(shí)還為開發(fā)人員提供了功能強(qiáng)大的函數(shù)。雖然前面滴前面滴3章已經(jīng)介紹過字符,但是字符和字符串是非常重要章已經(jīng)介紹過字符,但是字符和字符串是非常重要的變量類型。本章將深入介紹字符和字符串的變量類型。本章將深入介紹字符和字符串,希望讀者能熟希望讀者能熟練掌握這些內(nèi)容。練掌握這些內(nèi)容。這一章的主要內(nèi)容如下:這一章的主要內(nèi)容如下:字符串的操作字符串的操作可變字符串可變字符串字符集編碼字符集編碼字符集之間的

2、轉(zhuǎn)換字符集之間的轉(zhuǎn)換8.1 8.1 字符字符字符字符Char表示一個(gè)表示一個(gè)Unicode字符,可以構(gòu)成字符串。字符,可以構(gòu)成字符串。下面接著第下面接著第2章的內(nèi)容來詳細(xì)介紹字符。章的內(nèi)容來詳細(xì)介紹字符。8.1.1 Char8.1.1 Char的使用的使用Char為開發(fā)人員提供了許多實(shí)用的方法,為了讓讀者為開發(fā)人員提供了許多實(shí)用的方法,為了讓讀者對(duì)其有個(gè)大概的了解。對(duì)其有個(gè)大概的了解。8.1.2 8.1.2 字符的比較字符的比較字符同數(shù)值一樣,是可以進(jìn)行大小比較的。它們大小字符同數(shù)值一樣,是可以進(jìn)行大小比較的。它們大小關(guān)系是根據(jù)關(guān)系是根據(jù)ASCII表定義的。有興趣的讀者可以查閱相關(guān)資表定義的。

3、有興趣的讀者可以查閱相關(guān)資料。料。8.2 8.2 字符串字符串在在.NET中,關(guān)鍵字中,關(guān)鍵字string實(shí)際映射為實(shí)際映射為System.String類,類,是一個(gè)非常強(qiáng)大、用途非常廣泛的基類。字符串一旦創(chuàng)建將不是一個(gè)非常強(qiáng)大、用途非常廣泛的基類。字符串一旦創(chuàng)建將不可改變,下面將逐一講述字符串的內(nèi)容。可改變,下面將逐一講述字符串的內(nèi)容。8.2.1 8.2.1 字符串基本概念字符串基本概念字符串是字符串是Unicode字符的有序集合,用于表示文本,該字符的有序集合,用于表示文本,該類型變量可以看作是類型變量可以看作是char變量的只讀數(shù)組。在前面的章節(jié)中變量的只讀數(shù)組。在前面的章節(jié)中,最常見的

4、代碼語句如下,其中,最常見的代碼語句如下,其中“Hello C#”就是一個(gè)字符就是一個(gè)字符串。串。Console.WriteLine(“Hello C#”);1定義字符串定義字符串2字符串的轉(zhuǎn)義字符字符串的轉(zhuǎn)義字符“”8.2.2 8.2.2 字符串的查找字符串的查找在在.NET類中提供了查找字符串中字符的方法,其采用順序類中提供了查找字符串中字符的方法,其采用順序比較的辦法在字符串中查找相應(yīng)的字符。比較的辦法在字符串中查找相應(yīng)的字符。方法說明Indexof報(bào)告String或一個(gè)或多個(gè)字符在此字符在此字符串中的第一個(gè)匹配項(xiàng)的索引IndexofAny報(bào)告指定Unicode字符數(shù)組中的任意字符在此實(shí)

5、例中第一個(gè)匹配項(xiàng)的索引LastIndexOf報(bào)告指定Unicode字符或String在此實(shí)例中的最后一個(gè)匹配項(xiàng)的索引LastIndexOfAny報(bào)告指定Unicode字符數(shù)組中指定的一個(gè)或多個(gè)字符在此實(shí)例中的最后一個(gè)匹配項(xiàng)的索引位置8.2.3 8.2.3 字符串的比較字符串的比較在在.NET類中提供了字符串比較的方法,通常字符串的比類中提供了字符串比較的方法,通常字符串的比較是通過較是通過String.Compare方法來進(jìn)行的。方法來進(jìn)行的。返回值條件小于零strA小于strB零strA等于strB大于零strA大于strB8.2.4 8.2.4 字符串的插入字符串的插入在在.NET類中提供

6、了字符串插入的方法,其比較簡單,類中提供了字符串插入的方法,其比較簡單,只有一種形式定義格式如下:只有一種形式定義格式如下:Public string Insert(int startIndex, string str)在上述定義中,在上述定義中,startIndex是要插入的索引位置,參數(shù)是要插入的索引位置,參數(shù)str是要插入的是要插入的String,返回值為在索引,返回值為在索引startIndex處插入處插入str的一個(gè)新的的一個(gè)新的String。如果。如果str是一個(gè)空引用、是一個(gè)空引用、startIndex是一個(gè)負(fù)數(shù)、是一個(gè)負(fù)數(shù)、startIndex大于調(diào)用大于調(diào)用String的長度

7、,將會(huì)拋出的長度,將會(huì)拋出一個(gè)異常。一個(gè)異常。8.2.5 8.2.5 字符串的刪除字符串的刪除在在.NET類中提供了字符串刪除的方法,通常字符串的類中提供了字符串刪除的方法,通常字符串的比較是通過比較是通過String.Remove方法來進(jìn)行的。方法來進(jìn)行的。8.2.6 8.2.6 子字符串的獲得子字符串的獲得在在.NET類中提供了子字符串獲得的方法,通常子字符串的類中提供了子字符串獲得的方法,通常子字符串的獲得通過獲得通過String.SubString方法來進(jìn)行。方法來進(jìn)行。方法說明String.SubString(Int32)子字符串從指定的字符位置開始String.SubString(

8、Int 32,Int 32)子字符串從指定的字符位置開始并且具有指定的長度。8.2.7 8.2.7 字符串的替換字符串的替換在在.NET類中提供了字符串替換的方法,通常子字符串的類中提供了字符串替換的方法,通常子字符串的獲得要通過獲得要通過String.Replace方法來進(jìn)行。方法來進(jìn)行。方法說明String.Replace(Char,Char)將此實(shí)例中指定的Unicode字符的所有匹配項(xiàng)替換為其他指定的Unicode字符String.Replace(String,String)將字符串中指定的String的所有匹配項(xiàng)替換為其他指定的String8.2.8 8.2.8 字符串的其他方法字符

9、串的其他方法在在.NET類中還提供了許多其他操作字符串的方法。類中還提供了許多其他操作字符串的方法。PadLeft()方法通過在字符串開始的位置添加空字符或一個(gè)方法通過在字符串開始的位置添加空字符或一個(gè)重復(fù)字符使調(diào)用重復(fù)字符使調(diào)用String對(duì)象中的字符右對(duì)齊,這樣使字符串對(duì)象中的字符右對(duì)齊,這樣使字符串達(dá)到指定的長度。達(dá)到指定的長度。PadRight()通過在末尾插入字符執(zhí)行左對(duì)通過在末尾插入字符執(zhí)行左對(duì)齊。齊。8.2.8 8.2.8 字符串的其他方法字符串的其他方法方法說明String. PadLeft(int)將此實(shí)例開始的位置添加空字符使字符串右對(duì)齊。String.PadLeft (i

10、nt,char)將此實(shí)例開始的位置重復(fù)添加字符使字符串右對(duì)齊。String.PadRight(int)將此實(shí)例末尾的位置添加空字符使字符串左對(duì)齊。String.PadRight (int,char)將此實(shí)例末尾的位置重復(fù)添加字符使字符串左對(duì)齊。8.3 8.3 可變字符串可變字符串.NET提供了類提供了類StringBuider來表示可變字符串。類來表示可變字符串。類String在構(gòu)造一個(gè)字符串時(shí),要給它所需要的內(nèi)存來保存字在構(gòu)造一個(gè)字符串時(shí),要給它所需要的內(nèi)存來保存字符串,但符串,但StringBuilder通常分配的內(nèi)存會(huì)比需要的更多。通常分配的內(nèi)存會(huì)比需要的更多。當(dāng)每次使用類當(dāng)每次使用類S

11、tring中的方法時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新中的方法時(shí),都要在內(nèi)存中創(chuàng)建一個(gè)新的字符串對(duì)象,這就需要為該新對(duì)象分配新的空間,如果需的字符串對(duì)象,這就需要為該新對(duì)象分配新的空間,如果需要重復(fù)使用多次,那么創(chuàng)建新要重復(fù)使用多次,那么創(chuàng)建新String對(duì)象的相關(guān)系統(tǒng)開銷可對(duì)象的相關(guān)系統(tǒng)開銷可能會(huì)非常昂貴。如果修改字符串而不創(chuàng)建新的對(duì)象,則可以能會(huì)非常昂貴。如果修改字符串而不創(chuàng)建新的對(duì)象,則可以使用類使用類StringBuider。雖然類。雖然類StringBuider是可變的,但其是可變的,但其方法屬性等卻不如類方法屬性等卻不如類String充分。充分。8.3.1 StringBuilder8.3.

12、1 StringBuilder的簡單介紹的簡單介紹定義一個(gè)類定義一個(gè)類StringBuider的變量非常簡單,跟其他類的變量非常簡單,跟其他類的使用方法一樣,例如:的使用方法一樣,例如:StringBuider myStringBuider = new StringBuider();該類的構(gòu)造函數(shù)有很多,讀者可以根據(jù)自己的需要選該類的構(gòu)造函數(shù)有很多,讀者可以根據(jù)自己的需要選擇合適的構(gòu)造函數(shù)。擇合適的構(gòu)造函數(shù)。8.3.1 StringBuilder8.3.1 StringBuilder的簡單介紹的簡單介紹函數(shù)說明StringBuider()初始化StringBuider類的新實(shí)例。StringB

13、uider(Int32)用指定的容量初始化StringBuider類的新實(shí)例。StringBuider(String)用指定的子字符串初始化StringBuider類的新實(shí)例。StringBuider(Int32,Int32)初始化StringBuider類的新實(shí)例,該類起始于指定容量并且可增長到指定的最大容量。StringBuider(String,Int32)用指定的子字符串和容量初始化StringBuider類的新實(shí)例。StringBuider(String,Int32,Int32,Int32)用指定的子字符串和容量初始化StringBuider類的新實(shí)例。8.3.2 StringBui

14、der8.3.2 StringBuider類實(shí)現(xiàn)字符串元素添加輸出類實(shí)現(xiàn)字符串元素添加輸出StringBuider的常用屬性:的常用屬性:屬性說明Capacity獲取或設(shè)置可包含在當(dāng)前實(shí)例所分配的內(nèi)存中最大字符數(shù)。Chars獲取或設(shè)置此實(shí)例中指定字符位置處的字符。Length獲取或設(shè)置此實(shí)例的長度。MaxCapacity該實(shí)例的最大容量。8.4 8.4 理解編碼理解編碼隨著計(jì)算機(jī)在各個(gè)國家的應(yīng)用和普及,許多國家都把本隨著計(jì)算機(jī)在各個(gè)國家的應(yīng)用和普及,許多國家都把本地的字符集引入了計(jì)算機(jī),這樣就存在了許多種編碼方式。地的字符集引入了計(jì)算機(jī),這樣就存在了許多種編碼方式。對(duì)于開發(fā)人員來講,如果不了解

15、編碼的原理,在自己編寫的對(duì)于開發(fā)人員來講,如果不了解編碼的原理,在自己編寫的應(yīng)用軟件中,就會(huì)出現(xiàn)亂碼。應(yīng)用軟件中,就會(huì)出現(xiàn)亂碼。8.4.1 8.4.1 字符集的編碼問題字符集的編碼問題計(jì)算機(jī)的最初使用是在美國,當(dāng)時(shí)所使用的字符就是現(xiàn)計(jì)算機(jī)的最初使用是在美國,當(dāng)時(shí)所使用的字符就是現(xiàn)在能在鍵盤上的一些符號(hào)和少數(shù)的幾個(gè)特殊符號(hào),每一個(gè)字在能在鍵盤上的一些符號(hào)和少數(shù)的幾個(gè)特殊符號(hào),每一個(gè)字符都用一個(gè)數(shù)字來表示,一個(gè)字節(jié)所能表示的數(shù)字范圍足以符都用一個(gè)數(shù)字來表示,一個(gè)字節(jié)所能表示的數(shù)字范圍足以容納所有的這些字符。可實(shí)際上表示這些字符數(shù)字字節(jié)的最容納所有的這些字符。可實(shí)際上表示這些字符數(shù)字字節(jié)的最高位都是

16、高位都是0,即這些數(shù)字都在,即這些數(shù)字都在0到到127之間。例如字符之間。例如字符a對(duì)應(yīng)數(shù)對(duì)應(yīng)數(shù)字字97等,這套編碼規(guī)則被稱為等,這套編碼規(guī)則被稱為ASCII。當(dāng)把中國的本地字符集引入計(jì)算機(jī)時(shí),一個(gè)字節(jié)所能表當(dāng)把中國的本地字符集引入計(jì)算機(jī)時(shí),一個(gè)字節(jié)所能表示的數(shù)字范圍就不能容納所有的中文漢字,于是中國大陸把示的數(shù)字范圍就不能容納所有的中文漢字,于是中國大陸把每一個(gè)中文字符用兩個(gè)字節(jié)的數(shù)字來表示,原有的每一個(gè)中文字符用兩個(gè)字節(jié)的數(shù)字來表示,原有的ASCII字字符編碼保持不變,仍用一個(gè)字節(jié)來表示,為了將一個(gè)中文字符編碼保持不變,仍用一個(gè)字節(jié)來表示,為了將一個(gè)中文字符與兩個(gè)符與兩個(gè)ASCII碼字符相

17、區(qū)別,中文字符每個(gè)字節(jié)的最高位碼字符相區(qū)別,中文字符每個(gè)字節(jié)的最高位都為都為1,這套編碼規(guī)則就稱為,這套編碼規(guī)則就稱為GBK。后來又在。后來又在GBK的基礎(chǔ)上的基礎(chǔ)上對(duì)更多的中文字符(繁體字)進(jìn)行了編碼,新的編碼系統(tǒng)就對(duì)更多的中文字符(繁體字)進(jìn)行了編碼,新的編碼系統(tǒng)就是是GB2312。8.4.2 C#8.4.2 C#對(duì)字符集的支持對(duì)字符集的支持文本是應(yīng)用程序與用戶交互的主要方式,文本用來向文本是應(yīng)用程序與用戶交互的主要方式,文本用來向用戶顯示輸出,查詢輸入和向用戶提供其他有價(jià)值的信息。用戶顯示輸出,查詢輸入和向用戶提供其他有價(jià)值的信息。C#中,中,System.Text命名空間中包含了代表命

18、名空間中包含了代表ASCII、UTF-7和和UTF-8方案的類,如圖方案的類,如圖8.1所示。這些類主要用于字符數(shù)所示。這些類主要用于字符數(shù)組和字節(jié)數(shù)組之間的相互轉(zhuǎn)換。組和字節(jié)數(shù)組之間的相互轉(zhuǎn)換。當(dāng)各種編碼方案類型不一致時(shí),要考慮兼容的問題,當(dāng)各種編碼方案類型不一致時(shí),要考慮兼容的問題,這一點(diǎn)很重要。例如,用這一點(diǎn)很重要。例如,用Unicode編碼方案寫入的數(shù)據(jù)不能編碼方案寫入的數(shù)據(jù)不能使用使用ASCII、UTF-7和和UTF-8編碼方案正確的解碼。因?yàn)榫幋a方案正確的解碼。因?yàn)閁nicode編碼方案使用兩個(gè)字節(jié)表示每個(gè)字符,而其他方案編碼方案使用兩個(gè)字節(jié)表示每個(gè)字符,而其他方案不是這樣。但是用

19、不是這樣。但是用ASCII、UTF-7和和UTF-8編碼方案在讀寫編碼方案在讀寫ASCII數(shù)據(jù)時(shí)是兼容的。當(dāng)出現(xiàn)不兼容的時(shí)候,不會(huì)拋出異數(shù)據(jù)時(shí)是兼容的。當(dāng)出現(xiàn)不兼容的時(shí)候,不會(huì)拋出異常,但會(huì)出現(xiàn)亂碼。常,但會(huì)出現(xiàn)亂碼。8.4.2 C#8.4.2 C#對(duì)字符集的支持對(duì)字符集的支持8.4.3 ASCIIEncoding8.4.3 ASCIIEncoding類實(shí)現(xiàn)轉(zhuǎn)換類實(shí)現(xiàn)轉(zhuǎn)換ASCIIEncoding類提供了使用類提供了使用ASCII字符編碼方案的功字符編碼方案的功能,定義了把字符串或字符數(shù)組轉(zhuǎn)換為字節(jié)和把字節(jié)數(shù)組解能,定義了把字符串或字符數(shù)組轉(zhuǎn)換為字節(jié)和把字節(jié)數(shù)組解碼轉(zhuǎn)換為字符序列的方法。在該方

20、案中,碼轉(zhuǎn)換為字符序列的方法。在該方案中,Unicode字符被編字符被編碼為碼為7位的位的ASCII字符。字符。ASCII字符值的范圍從字符值的范圍從u0000到到u007F,該范圍不足以表示某些語言中使用的字符。,該范圍不足以表示某些語言中使用的字符。ASCIIEncoding類的構(gòu)造函數(shù)如下:類的構(gòu)造函數(shù)如下:Public ASCIIEncoding()8.4.4 UnicodeEncoding8.4.4 UnicodeEncoding類實(shí)現(xiàn)轉(zhuǎn)換類實(shí)現(xiàn)轉(zhuǎn)換UnicodeEncoding類提供了使用類提供了使用Unicode字符編碼方字符編碼方案的功能,定義了把每個(gè)案的功能,定義了把每個(gè)UT

21、F-16格式的字符編碼為兩個(gè)連格式的字符編碼為兩個(gè)連續(xù)的字節(jié)。字節(jié)順序可以是續(xù)的字節(jié)。字節(jié)順序可以是Little-endian或或Big-endian。在。在Little-endian的格式中,先讀寫最不重要的字節(jié),在的格式中,先讀寫最不重要的字節(jié),在Big-endian的格式中正好相反。的格式中正好相反。UnicodeEncoding類的構(gòu)造函類的構(gòu)造函數(shù)如下:數(shù)如下:Public UnicodeEncoding();Public UnicodeEncoding(bool bigEnding,bool byteOrderMark);8.4.5 UTF7Encoding8.4.5 UTF7En

22、coding類實(shí)現(xiàn)轉(zhuǎn)換類實(shí)現(xiàn)轉(zhuǎn)換UTF7Encoding類提供了使用類提供了使用7位的位的UCS轉(zhuǎn)換格式(轉(zhuǎn)換格式(UTF-7)編碼方案的功能,該方案支持所有的)編碼方案的功能,該方案支持所有的Unicode字符。其定字符。其定義了整型值為義了整型值為127或或127以下的字符用一個(gè)字節(jié)表示,整型值為以下的字符用一個(gè)字節(jié)表示,整型值為127以上的字符用多個(gè)字節(jié)表示。以上的字符用多個(gè)字節(jié)表示。UTF7Encoding類的構(gòu)造函類的構(gòu)造函數(shù)為:數(shù)為:Public UTF7Encoding();Public UT7Encoding(bool allowOptionals);8.4.6 UTF8Encoding8.4.6 UTF8Encoding類實(shí)現(xiàn)轉(zhuǎn)換類實(shí)現(xiàn)轉(zhuǎn)換UTF8Encoding類提供了使用類提供了使用8位的位的UCS轉(zhuǎn)換格式(轉(zhuǎn)換格式(UTF-8)編碼方案的功能,該方案支持所有的)編碼方案的功能,該方案支持所有的Unicode字符。字符。其定義了整型值為其定義了整型值為127或或127以下的字符用一個(gè)字節(jié)表示,整以下的字符用一個(gè)字節(jié)表示,整型值為型值為127以上的字符用兩個(gè)字節(jié)表示。以上的字符

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論