《C#程序设计》课件第10章字符串_第1页
《C#程序设计》课件第10章字符串_第2页
《C#程序设计》课件第10章字符串_第3页
《C#程序设计》课件第10章字符串_第4页
《C#程序设计》课件第10章字符串_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字符串思政目标:

☞学习字符串,明白编程中重要细节,引导学生深入思考

☞通过实例,引导学生对知识融会贯通,培养学生创新和实践能力技能要求:

☞了解字符串概念及其构造方式,掌握针对字符串操作的常用方法

☞掌握StringBuilder对象与String对象的区别,掌握其属性与方法

☞了解计算机编码实践目标:

☞通过动手操作,能够深入理解字符串与数组之间的转化

☞理解示例,能够充分理解字符串相关函数

☞能够实现各种编码之间的转换第10章字符串的基本特征String类的方法StringBuilder编码Object类字符串的基本特征01PART字符串及其构造字符串是一个字符数组,在C#中,默认采用Unicode字符编码方式。C#的字符串可以视为一个只读字符数组,故从字符数组也可以获得字符串(1)直接给字符串赋字面值字符串的基本特征应注意的是,只修改某个指定位置的字符,类似“s[1]='x';”是行不通的,因为它是只读的。反过来,字符串可以视为只读字符数组,故可以像数组一样使用字符串的基本特征字符串对象唯一且重要的属性是Length,该属性返回字符串的长度,无论中文还是英文或者数字字符,都占一个长度字符串的基本特征字符串具有不可变性,即一旦声明完毕,字符串就不能再被改变字符串的基本特征由此可以看出,由于字符串是引用类型,上文改变的只是变量s的指向,并非字符串本身。同理,字符串变量的赋值问题,其实就是更改或者共享指向的问题。在C#中,有个特殊的字符串:string.Empty,代表"";即一对空引号,该字符串的长度为零。而null则代表字符串变量没有任何指向。虽然这两者意思不一样,但是在很多场合是不能出现的,于是有了string.IsNullOrEmpty()方法来测试null或空字符串。@注意事项字符转义在字符串的使用过程中,常常会涉及到@符号和转义符\的使用。例如,加载图片前可能需要先定义一个图片路径@不是万能的,如字符串中包含双引号时,还是需要用\进行转义,如图10-10所示。另外,还需要注意\的使用场合。字符串的基本特征String类的方法02PART1.string.Compare()该方法用于比较两个字符串值是否相同,其重载形式多达10种,功能强大,使用灵活,其返回值为-1、0或1,其中,返回0表明两个字符串值相等。String类的方法从上例可以看出,该方法比较的是两个字符串的值是否相等,另外也可以看到,该方法比较时默认是区分大小写的。如果不想区分大小写,应该采用合适的重载形式及参数。2.string.Concat()该方法用于将两个或者更多个字符串或者object对象连接起来。典型的重载方法如下String类的方法3.string.Copy()该方法从指定字符串复制得到一个与其值相等的另一个字符串实例,新得到的字符串与源字符串不占用相同内存空间String类的方法4.string.Format()String类的方法字母说明示例输出C货币string.Format("{0:C3}",2)$2.000D十进制string.Format("{0:D3}",2)002E科学计数法1.20E+0011.20E+001G常规string.Format("{0:G}",2)2N用逗号隔开string.Format("{0:N}",250000)250,000.00X十六进制string.Format("{0:X000}",12)C该方法可用于数值、日期等数据的格式化输出,其字母参数的说明。string.Format()数值格式化——字母参数String类的方法string.Format()数值格式化——其他字符参数字符说明格式符输出示例备注00占位{0:00.0000}1500.4200用指定个数的0补位#数字占位{0:(#).##}(1500).42—.小数点{0:0.0}1500.4—,千分割符{0:0,0}1,500必须写在两个0之间%百分比{0:0%}150042%—ee指数{0:00e+0}15e+2—注:该表的输出都以1500.42为例。String类的方法简单的日期格式符格式说明示例(传入当前日期DateTime.Now)d短日期10/10/2020D长日期December10,2020t短时间10:11PMT长时间10:11:29PMf完整日期短时间December10,202010:11PMF完整日期长时间December10,202010:11:29PMg常规(短日期短时间)10/12/202010:11PMG常规(短日期长时间)10/12/202010:11:29PMM月日December10UGMTDecember11,20203:13:50AMY年月December,2020String类的方法自定义的日期格式符格式符说明格式符示例输出dd日,两位,不足补0{0:dd}10ddd简写的星期缩写,3个字符{0:ddd}Tuedddd完整的星期名字{0:dddd}Tuesdayhh小时(两位)12小时制{0:hh}10HH小时(两位)24小时制{0:HH}22mm分钟00~59{0:mm}38MM月01~12{0:MM}12MMM月份简称{0:MMM}DecMMMM月份全称{0:MMMM}Decemberss秒数,两位,00~59{0:ss}46ttAM或PM{0:tt}PMyy年(两位){0:yy}02yyyy年(四位){0:yyyy}2002:分隔符{0:hh:mm:ss}10:25:20/分隔符{0:dd/MM/yyyy}10/10/2020string.Join()该方法用于将字符串数组中的各个元素以指定的分隔符连接起来。该方法与字符串对象的Split()方法功能相反,Split()方法使用更为灵活。String类的方法3.Contains()4.CopyTo()1.Clone()该方法完成字符串的复制,不过其返回值是Object类型的。2.CompareTo()该方法具有两种重载形式,它不具有string.Compare()方法的灵活性,只能采取大小写敏感的方式将调用方字符串与另外一个字符串或者Object类型实例进行比较。该方法判断调用方字符串中指定字符串的存在性。其返回值为:如果字符串中出现text,则返回true,否则返回false,如果text为空字符串("")也返回true。String类的方法字符串对象的方法该方法用于实现从调用方字符串到字符数组的复制04030201从源字符串sSrc的索引位置(srcIndex)处开始复制srcIndexdesChar字符数组中开始接受复制结果的起始位置,即复制过来的结果从desIndex指定的位置开始存储,该位置前的元素维持不变desIndex复制的字符存入此字符数组desChar从源字符串复制count个字符countString类的方法参数意义分别如下(1)EndsWith()方法用于判断调用方字符串是否以指定字符串结束,其常用重载形式如图10-21所示。该重载形式判断调用方字符串对象是否以value指定的字符串结束,是则为true,否则为false。该形式中的第二个参数设置比较时的区域和大小写等。String类的方法5.EndsWith()(2)StartsWith()方法用于判断调用方字符串是否以指定字符串开始该形式判断调用方字符串对象是否以value指定的字符串开始,是则为true,否则为false。若比较时有额外条件,可通过StringComparison枚举型参数指定。String类的方法StartsWith()方法用于比较两个字符串是否相等,其常用重载形式如图所示。该重载形式表示比较调用方字符串与value参数给出的字符串值是否相同,若相同返回true,否则返回false。该形式表示比较调用方的字符串对象与参数给出的对象在不区分大小写的情况下是否相同,如相同,就返回true;反之,返回false。第二个参数指定区域性、大小写等。String类的方法6.Equals()在C#中,也可以使用==或者!=来判断两个字符串是否相等,结果与Equals()方法相同。该方法用于获取指定的字符串在调用方字符串的开始位置索引该形式表示在调用方字符串对象中寻找field,如果找到,返回开始索引,反之,返回-1。String类的方法7.IndexOf()该方法用于获取指定字符数组中所有字符在调用方字符串中的最早位置该形式表示在调用方字符串对象中查找字符数组anyOf中的字符,查找位置从startIndex指示的位置开始,返回的值是找到字符的最小位置值,即若在字符数组anyOf中有多个字符都存在于字符串对象中,则其返回值是多个字符位置中最靠前的那一个索引位置。String类的方法8.IndexOfAny()统计字符或者单词个数是常用功能,例如MicrosoftWord即具备此项功能。下面以统计单词个数的功能来演示IndexOfAny()方法的使用。由于需要统计单词,而对英文字符串而言,各个单词之间的间隔可能的情况有:空格、逗号、句号、问号、感叹号等,所以只需要将这些标点符号存入字符数组anyOf中即可。代码如图所示。该程序仅适用于英文字母,对中文并不适用,若希望对中文适用,要考虑更多的标点。String类的方法该方法用于向调用方字符串中插入特定字符串该形式表示在startIndex指示的索引位置插入字符串value,原来startIndex及后续的内容后移,返回插入后的值。String类的方法9.Insert()(1)PadLeft()方法在调用方字符串的开头,通过添加指定的重复字符填充字符串。(2)PadRight()方法在调用方字符串的结尾,通过添加指定的重复字符填充字符串。String类的方法10.PadLeft()和PadRight()该方法用于删除调用方字符串中指定内容第一种重载形式该形式表示从startIndex位置开始,删除此位置后所有的字符(包括当前位置所指定的字符)String类的方法11.Remove()第二种重载形式该形式表示从startIndex位置开始,删除count个字符。String类的方法11.Remove()该方法用于替换调用方字符串中的特定内容,有两种声明形式该形式表示在调用方字符串对象中寻找oldChar,如果找到,就用newChar将oldChar替换掉。String类的方法12.Replace()该方式表示在对象中寻找oldString,若找到,则用newString将oldString替换掉。String类的方法12.Replace()该方法用于切割字符串该方式表示根据separator指定的字符切分调用方字符串,返回切分后的字符串数组,separator可以是不包含分隔符的空数组或空引用。String类的方法13.Split()参数count指定要返回的子字符串的最大数量,若count不填则全部拆分。String类的方法13.Split()StringSplitOptions为枚举,其值如下:None,返回值包括含有空字符串的数组元素;RemoveEmptyEntries,返回值不包括仅为空字符串的数组元素。String类的方法13.Split()如果想从字符串s="a,b.c,6,,3,9_8-e,f."中取得各个字母和数字,方法如下String类的方法13.Split()该方法存在一些问题,即6后面有两个连续的逗号,正是此处会导致最终结果中有一个为空串的元素。这是一个比较长的字符串,修正的方法就是给Split()方法补充第二个参数,StringSplitOptions.RemoveEmptyEntries。设定字符串如图所示,从该字串中提取出名词,仍然使用Split()方法,只是第一个参数不再使用char类型数组,使用字符串形式的重载即可,其他类同。该方法经常用于导入格式化的数据并做相关处理。String类的方法13.Split()该方法用于从调用方字符串中提取子字符串String类的方法14.Substring()该形式表示从startIndex位置开始,提取此位置后所有的字符(包括当前位置所指定的字符)String类的方法14.Substring()该形式表示从startIndex位置开始,提取count个字符该方法用于将调用方字符串转换为字符数组。String类的方法15.ToCharArray()通过字符数组的方式来修改一个字符串的思路是:先把字符串通过ToCharArray()转换为字符数组,然后修改此数组的元素,最后通过newstring(char[])来达到生成一个满足条件的新字符串的要求ToLower()方法表示将调用方字符串中的大写全部转为小写,ToUpper()方法表示将指定字符串中的小写转换为大写String类的方法16.ToLower()和ToUpper()通过字符数组的方式来修改一个字符串的思路是:先把字符串通过ToCharArray()转换为字符数组,然后修改此数组的元素,最后通过newstring(char[])来达到生成一个满足条件的新字符串的要求该方法表示清空调用方字符串前后的空格String类的方法17.Trim()该形式表示将字符串对象包含的字符串两边的空格去掉后返回。String类的方法17.Trim()该形式表示从调用方字符串对象的开始和末尾移除指定字符数组中的所有匹配项,遇到第一个不匹配的项则停止删除操作。String类的方法17.Trim()与该方法功能类似的还有TrimEnd()和TrimStart()TrimEnd()表示对调用方字符串末尾与指定字符数组中的所有项进行匹配,匹配到则移除,遇到第一个不匹配的则停止。TrimStart()表示对调用方字符串开始部分与指定字符数组中的所有项进行匹配,匹配到则移除,遇到第一个不匹配的则停止。String类的方法综合案例String类的方法运行结果StringBuilder03PART04030201StringBuilder与string对象相比的最大好处在于,对StringBuilder对象进行追加、插入、替换、移除操作时,不会产生新对象,因此它适用于对字符串进行频繁操作的场合。StringBuilder优势StringBuilder对象所占用的内存是动态变化的,当然也可以在实例化时显式指定其容量。StringBuilder默认大小是16,最大容量是Int32.MaxValue,当往其中存入的数据长度大于最大容量时,会引发ArgumentOutOfRangeException异常。StringBuilder对象StringBuilderStringBuilder属性StringBuilder属性作用MaxCapacity对象的最大容量Length对象中所存储字符串的实际长度Capacity设置或获取对象的容量,当设置的初始对象容量小于Length时,Capacity会自动扩大到Length所指定的大小示例StringBuilder对象的属性从执行结果仔细体会三个属性的含义。最大容量MaxCapacity维持不变,Length属性是StringBuilder属性中字符串的长度,而容量Capacity则默认为16,当Length小于或等于指定的Capacity时,Capacity维持初始指定大小,否则Capacity会自动扩展以便能容纳所有字符。StringBuilder示例另外,也可以在实例化StringBuilder对象时,同时指定其字符串内容和容量大小StringBuilder这并不意味着sb对象只能容纳200个字符,当往其中存放的字符超过200时,会自动扩充。StringBuilder常用方法StringBuilder方法作用Append用于将文本或者对象的字符串表示形式添加到当前对象的结尾处AppendFormat用于对追加部分字符串进行格式化EnsureCapacity动态调整StringBuilder对象的容量大小,但不得小于LengthInsert将指定的内容(字符、字符串)等插入到当前实例中的指定位置Replace将当前实例中指定的内容(字符、字符串)等替换为另外指定内容示例Append()。该方法用于往现有字符串实例追加字符串StringBuilder从上述示例可以看到:StringBuilder实例的容量增加遵从2的幂次增长规律,最小为16。Append()方法可以起到类似“+”的字符串接的作用,但与string类型不同的是,使用Append()方法不会在内存中创建新的字符串实例。ToString()方法用于字符串的原样显示。示例AppendFormat()。该方法可以用于将字符串按照指定的格式进行格式化后再追加到StringBuilder实例后面StringBuilder其中,format参数指定追加时所使用的格式符,而args参数则指定需要追加的内容。示例EnsureCapacity()。若当前容量小于指定容量,内存分配会增加内存空间以达到指定容量,则可以通过该方法增加StringBuilder实例所占的空间,但无法缩减其空间StringBuilder通过上面的程序,也可以看到EnsureCapacity()方法可以增加StringBuilder实例所占空间的大小,但是却无法缩减其所占用空间。示例Insert()。该方法在当前字符串中插入指定的内容,其重载形式非常多StringBuilder在index位置开始插入count个value,得到一个新的字符串实例示例Replace()。用于将当前实例中指定的内容(字符、字符串)等替换为另外指定内容。该方法有如下几种常用重载形式StringBuilder编码04PART04030201计算机中所有数据的存储和运算都使用二进制数进行表示,一个英文字符和二进制位之间有对应关系。数据在进行使用时,为避免混乱,都需要遵循相同的编码规则。最广泛使用的一种字符编码是ASCII码。编码的背景世界有多种语言,不同语言之间的编码,有时并不遵循ASCII码的规范,因而造成乱码问题。为解决乱码问题,出现一种新的编码方案,称之为Unicode编码Unico

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论