




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章 常用数据结构与算法,7.1 字符串,字符串是应用程序和用户交互的主要方式之一。 .NET提供了几个类来快速实现字符串操作,包括String、StringBuilder等。,2,7.1.1 静态字符串String,System.String是最常用的字符串操作类。下面从各个应用的角度对String类进行详细的介绍。 1. 比较字符串 比较字符串是指按照字典排序规则,判定两个字符的相对大小。 在String类中,常用的比较字符串的方法包括Compare、CompareTo、CompareOrdinal以及Equals。,3,7.1.1 静态字符串String,(1)Compare方法 Compare方法是String类的静态方法,用于全面比较两个字符串对象。 下面使用Compare方法来比较两个字符串,输出结果如注释语句所示。 /定义两个String对象,并对其赋值 System.String strA=“Hello“; System.String strB=“World“;,4,7.1.1 静态字符串String,/Compare Console.WriteLine(String.Compare(strA,strB); /-1 Console.WriteLine(String.Compare(strA,strA); /0 Console.WriteLine(String.Compare(strB,strA); /1,5,7.1.1 静态字符串String,(2)CompareTo方法 作用与Compare类似,返回值也相同。 CompareTo与Compare相比,区别在于: CompareTo不是静态方法,可以通过一个String对象调用; CompareTo没有重载形式,只能按照大小写敏感方式比较两个整串。,6,7.1.1 静态字符串String,CompareTo方法的使用如下代码所示: /定义两个String对象,并对其赋值 System.String strA=“Hello“; System.String strB=“World“; /CompareTo Console.WriteLine(strA.CompareTo(strB); /-1 Console.WriteLine(strB.CompareTo(strA); /1 Console.WriteLine(strA.CompareTo(strA); /0,7,7.1.1 静态字符串String,(3)Equals方法 Equals方法用于方便地判定两个字符串是否相同,有两种重载形式: public bool Equals(string) public static bool Equals(string,string) 如果两个字符串相等,Equals()返回值为True;否则,返回False。Equals方法的使用如下代码所示: Console.WriteLine(String.Equals(strA,strB); /false Console.WriteLine(strA.Equals(strB); /false,8,7.1.1 静态字符串String,(4)比较运算符 String支持两个比较运算符“=”、“!=”,分别用于判定两个字符是否相等和不等,并区分大小写。 下例中,使用“=”、“!=”对“Hello”和“World”进行比较。 /=和!= Console.WriteLine(strA=strB); /false Console.WriteLine(strA!=strB); /true,9,7.1.1 静态字符串String,2. 定位字符和子串 定位子串是指在一个字符串寻找其中包含的子串或者某个字符,在String类中,常用的定位子串和字符的方法包括StartWith/EndsWith、IndexOf/LastIndexOf以及IndexOfAny/LastIndexOf。,10,7.1.1 静态字符串String,(1)StartWith/EndsWith方法 StartWith方法可以判定一个字符串对象是否以另一个子字符串开头,如果是返回True;否则返回False。 其定义为: public bool StartsWith(string value) 其中,参数value即待判定的子字符串。 Console.WriteLine(strA.StartsWith(“He“);/true Console.WriteLine(strA.StartsWith(“She“);/false EndsWith方法判定一个字符串是否以另一个子字符串结尾。,11,7.1.1 静态字符串String,(2)IndexOf/LastIndexOf方法 IndexOf方法用于搜索一个字符串,某个特定的字符或子串第一次出现的位置,该方法区分大小写,并从字符串的首字符开始以计数。如果字符串中不包含这个字符或子串,则返回-1。 定位字符: int IndexOf(char value) int IndexOf(char value,int startIndex) int IndexOf(char value,int startIndex,int count) 下例在“Hello”中寻找字符“l”第一次出现的位置。 Console.WriteLine(strA.IndexOf(l); /2,12,7.1.1 静态字符串String,定位子串: int IndexOf(string value) int IndexOf(string value,int startIndex) int IndexOf(string value,int startIndex,int count) 在上述重载形式中,其参数含义如下: Value:待定位的字符或者子串。 startIndex:在总串中开始搜索的起始位置。 Count:在总串中从起始位置开始搜索的字符数。,13,7.1.1 静态字符串String,同IndexOf类似,LastIndexOf用于从某个位置倒序搜索在一个字符串中,某个特定的字符或子串最后一次出现的位置,其方法定义和返回值都与IndexOf相同。 例如,strA(“hello”)中最后一个l字符出现的位置: Console.Write(strA.LastIndexOf(l,4,5); /3 Console.Write(strA.LastIndexOf(l,2,3); /2,14,7.1.1 静态字符串String,(3)IndexOfAny/LastIndexOfAny IndexOfAny方法功能同IndexOf类似,区别在于,可以搜索在一个字符串中,出现在一个字符数组中的任意字符第一次出现的位置。,15,7.1.1 静态字符串String,下例分别在“Hello”中寻找字符数组anyof中任意一个字符第一次和最后一次出现的位置。 /IndexofAny|LastIndexOfAny char anyOf=H,e,l; Console.WriteLine(strA.IndexOfAny(anyOf); /0 Console.WriteLine(strA.LastIndexOfAny(anyOf); /3 同IndexOfAny类似,LastIndexOfAny用于倒序搜索最后一次出现的位置。,16,7.1.1 静态字符串String,3. 格式化字符串 Format方法用于创建格式化的字符串以及连接多个字符串对象。 Foramt方法也有多个重载形式,最常用的为: public static string Format(string format,params object args); 其中,参数format用于指定返回字符串的格式,而args为一系列变量参数。 与Console.WriteLine()方法的参数设置方法类似,可以类比记忆。,17,7.1.1 静态字符串String,例如:已有定义如下: int x=12,y=34; String s=“点坐标”; /若以此字符串格式”点坐标:(12,34)”输出结果。 Console.WriteLine(“0:(1,2)” , s , x , y ); /若只是想以此格式连接得到一个新的字符串,则可用 /Format String newStr; newStr=String.Format(“0:(1,2)” , s , x , y); Console.WriteLine(newStr); /点坐标:(12,34),18,7.1.1 静态字符串String,4. 连接字符串 (1) Concat方法 Concat方法用于连接两个或多个字符串 /Concat String newStr; newStr=String.Concat(strA,“ “,strB); Console.WriteLine(newStr); /“Hello World“,19,7.1.1 静态字符串String,(2)Join方法 Join方法利用一个字符串数组和一个分隔符串构造新的字符串。常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开。 Join方法的常用形式为: public static string Join(string separator,string values); 其中,参数separator为指定的分隔符,而values用于指定所要连接的多个字符串数组。,20,7.1.1 静态字符串String,下例用“”分隔符把“Hello”和“World”连起来。 /Join String newStr; String strArr=strA,strB; newStr=String.Join(“,strArr); Console.WriteLine(newStr); /“HelloWorld“,21,7.1.1 静态字符串String,(3)连接运算符“+” String支持连接运算符“+”,可以方便地连接多个字符串。 例如,下例把“Hello”和“World”连接起来。 /+ newStr=“; newStr=strA+strB; Console.WriteLine(newStr); /“HelloWorld“,22,7.1.1 静态字符串String,5. 分隔字符串 使用Split方法可以把一个整串,按照某个分隔符,分裂成一系列小的字符串。 例如,把整串,按照某个分隔符,分裂成一系列小的字符串。例如,把整串“HelloWorld”按照字符“”进行分裂,可以得到3个小的字符串,即“Hello”、“”(空串)和“World”。 Split方法最常用的形式为: public string Split(params char separator); 其中,参数separator数组包含分隔符。,23,7.1.1 静态字符串String,/Split newStr=“HelloWorld“; char separator=; String splitStrings=new String100; splitStrings = newStr.Split ( separator ) ; int i=0; while(isplitStrings.Length) Console.WriteLine(“item0:1“,i,splitStringsi); i+; ,输出结果如下: Item0:Hello Item1: Item2:World,24,7.1.1 静态字符串String,/若要以如下形式输入一维数组的5个元素值,如何接收数据? /1,2,3,4,5 String str; int arr=new int5; str=Console.ReadLine(); /”1,2,3,4,5” String splitStrings; splitStrings = str.Split ( ,) ; for(int i=0;isplitStrings.Length;i+) arri = int.Parse( splitStringsi ); ,25,7.1.1 静态字符串String,6. 插入和填充字符串 String类中可以用Insert方法在任意位置插入任意字符。 Insert方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串。Insert方法最常用的为: public string Insert(int startIndex,string value); 其中,参数startIndex用于指定所要插入的位置,从开始索引;value指定所要插入的字符串。,26,7.1.1 静态字符串String,下例中,在“Hello”的字符“H”后面插入“World”,构造一个串“HWorldello”。 /Insert String newStr; newStr=strA.Insert(1,strB); Console.WriteLine(newStr); /“HWorldello“,27,7.1.1 静态字符串String,7. 删除和剪切字符串 String类包含了删除一个字符串的方法。 可以用Remove方法在任意位置删除任意长度的字符。 也可以使用Trim/TrimeEnd/TrimStart方法剪切掉字符串中的一些特定字符。,28,7.1.1 静态字符串String,(1)Remove方法 Remove方法从一个字符串的指定位置开始,删除指定数量的字符。最常用的形式为: public string Remove(int startIndex,int count); 其中,参数startIndex用于指定开始删除的位置,从开始索引;count指定删除的字符数量。 下例中,把“Hello”中的“ell”删掉。 /Remove String newStr ; newStr=strA.Remove(1,3); Console.WriteLine(newStr); /“Ho“,29,7.1.1 静态字符串String,(2)Trim/TrimStart/TrimEnd方法 若想把一个字符串首尾处的一些特殊字符剪切掉,如去掉一个字符串首尾的空格等,可以使用String的Trim()方法。其形式如下: public string Trim() public string Trim(params char trimChars) 其中,参数trimChars数组包含了指定要去掉的字符,如果缺省,则删除空格符号。 下例中,实现了对“Hello#$”的净化,去掉首尾的特殊符号。,30,7.1.1 静态字符串String,/Trim String newStr ; char trimChars=,#,$, ; String strC=“Hello# $“; newStr=strC.Trim(trimChars); Console.WriteLine(newStr); /“Hello“ 另外,同Trim类似,TrimStart和TrimEnd分别剪切掉一个字符串开头或结尾处的特殊字符。,31,7.1.1 静态字符串String,8. 复制字符串 String类包括了复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作。,32,7.1.1 静态字符串String,(1)Copy方法 若想把一个字符串复制到另一个字符数组中,可以使用String的静态方法Copy来实现,其形式为: public static string Copy(string str); 其中,参数str为需要复制的源字符串,方法返回目标字符串。 下例中,把strA字符串“Hello”复制到newStr中。 /Copy newStr=“; newStr=String.Copy(strA); Console.WriteLine(newStr); /“Hello“,33,7.1.1 静态字符串String,(2)CopyTo方法 CopyTo方法可以实现Copy同样的功能,但功能更为丰富,可以复制字符串的一部分到一个字符数组中。其形式为: public void CopyTo(int sourceIndex,char destination,int destinationIndex,int count); 其中,参数sourceIndex为需要复制的字符起始位置,destination为目标字符数组,destinationIndex指定目标数组中的开始存放位置,而count指定要复制的字符个数。,34,7.1.1 静态字符串String,下例中,把strA字符串“Hello”中的“ell”复制到newCharArr中,并在newCharArr中从第1个元素开始存放。 /CopyTo char newCharArr=new char100; strA.CopyTo(1,newCharArr,0,3); Console.WriteLine(newCharArr); /”ell“,35,7.1.1 静态字符串String,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); /Hero,36,7.1.1 静态字符串String,10. 更改大小写 String提供了方便转换字符串中所有字符大小写的方法ToUpper和ToLower。 下例首先把“Hello”转换为“HELLO”,然后再变为小写形式“hello”。 /ToUpper|ToLower newStr=strA.ToUpper(); Console.WriteLine(newStr); /HELLO newStr=strA.ToLower(); Console.WriteLine(newStr); /hello,37,7.1.1 静态字符串String,补充:提取子串 利用字符串的提取子串方法Substring,就可从一个字符串中得到子字符串。 Substring方法有两个参数,第一个参数指出从第几个位置开始截取,第二个参数指出共提取几个字符。截取以后的子串是另外一个字符串,而不是原来的字符串截短,原来的字符串不变。,38,7.1.1 静态字符串String,using System; class SubString public static void Main() string strOriginal = “I loves China!“; string strSub = strOriginal.Substring(2, 5); Console.WriteLine(“strOriginal:“ + strOriginal); Console.WriteLine(“strSub:“ + strSub); ,39,7.1.1 静态字符串String,程序运行结果如下:,40,7.1.1 静态字符串String,11. String静态字符串 小结 本节介绍了最常用的String类,并从比较、定位子串、格式化、连接、分裂、插入、删除、复制、大小写转换10个方面介绍了其方法和应用。 之所以称String对象为静态串,是因为一旦定义一个String对象,就是不可改变的。在使用其方法(如插入、删除操作)时,都要在内存中创建一个新的String对象,而不是在原对象的基础上进行修改,这就需要开辟新的内存空间。如果需要经常进行串修改操作,使用String类无疑是非常耗费资源的,这时需要使用StringBuilder类。,41,7.1.2 动态字符串StringBuilder,与String类相比,System.Text.StringBuilder类可以实现动态字符串。 此外,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接在原StringBuilder对象的基础上进行修改。,42,7.1.2 动态字符串StringBuilder,1. 声明StringBuilder串 StringBuilder类位于命名空间System.Text中,使用时,可以在文件头通过using语句引入该命名空间: using System.Text; 声明StringBuilder对象需要使用new关键字,并可以对其进行初始化。如以下语句声明了一个StringBuilder对象myStringBuilder,并初始化为“Hello”: StringBuilder myStringBuilder=new StringBuilder(“Hello“);,43,7.1.2 动态字符串StringBuilder,2. 设置StringBuilder容量 StringBuilder对象为动态字符串,可以对其设置好的字符数量进行扩展。 另外,还可以设置一个最大长度,这个最大长度称为该StringBuilder对象的容量(Capacity)。,44,7.1.2 动态字符串StringBuilder,有两种方式来设置一个StringBuilder对象的容量。 (1)使用构造函数 StringBuilder构造函数可以接受容量参数,例如,下面声明一个StringBuilder对象sb2,并设置其容量为100。 /使用构造函数 StringBuilder sb2=new StringBuilder(“Hello“ ,100);,45,7.1.2 动态字符串StringBuilder,(2)使用Capacity读/写属性 Capacity属性指定StringBuilder对象的容量。 例如下面语句首先一个StringBuilder对象sb3,然后利用Capacity属性设置其容量为100。 /使用Capacity属性 StringBuilder sb3=new StringBuilder(“Hello“); sb3.Capacity=100;,46,7.1.2 动态字符串StringBuilder,3. 追加操作 追加一个StringBuilder是指将新的字符串添加到当前StringBuilder字符串的结尾处,可以使用Append和AppendFormat来实现这个功能。 (1)Append方法 下例中,把一个StringBuilder字符串“Hello”追加为“Hello World!”。 /Append StringBuilder sb4=new StringBuilder(“Hello“); sb4.Append(“ World!“); Console.WriteLine(sb4); /“Hello World!“,47,7.1.2 动态字符串StringBuilder,(2)AppendFormat方法 AppendFormat方法可以实现对追加部分字符串的格式化,可以定义变量的格式,并将格式化后的字符串追加在StringBuilder后面。,48,7.1.2 动态字符串StringBuilder,4. 插入操作 StringBuilder的插入操作是指将新的字符串插入到当前的StringBuilder字符串的指定位置。 如“Hello”变为“Heeeello”。可以使用StringBuilder类的Insert方法来实现这个功能,常用形式为: public StringBuilder Insert(int index, object value); 其中,参数index指定所要插入的位置,并从0开始索引,如index=1,则会在原字符串的第2个字符之前进行插入操作;同Append一样,参数value并不仅是只可取字符串类型。,49,7.1.2 动态字符串StringBuilder,下例中,把一个StringBuilder字符串“Hello”通过插入操作修改为“Heeeello”。 /Insert StringBuilder sb6=new StringBuilder(“Hello“); sb6.Insert(2,“eee“); Console.WriteLine(sb6); /“Heeeello“,50,7.1.2 动态字符串StringBuilder,5. 删除操作 StringBuilder的删除操作可以从当前S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业节能与新能源技术的推广应用
- 工业级机房综合布线技术要点
- 工业设计与智能制造成长路径
- 工业遗址的环境艺术改造
- 工业设计与创新产品开发
- 工业节能的途径与策略
- 工作效率提升工具与技巧
- 工作场所中的智能穿戴设备应用案例分享
- 工作与生活的平衡-如何做到高效工作更优生活
- 工程机械维修与故障排除
- 2025年中质协注册质量经理认证考试题库大全(含答案)
- 2025届高三语文二轮复习:典型题各个击破之表达效果类语用题型(含答案解析)
- 2025年四级听力试题及原文答案
- 数字媒体制作技术规范及操作指南
- 不要慌太阳下山有月光二部合唱线谱
- 仁爱版九上英语单词表
- 中国糖尿病防治指南(2024版)解读
- 河道钢板桩围堰施工方案
- 临床路径品管圈
- 公务员面试宝典:2025年升级版详解
- 【MOOC】《微型计算机原理与接口技术》(南京邮电大学)章节中国大学慕课答案
评论
0/150
提交评论