《(本科)第6章字符与字符串ppt课件.ppt》由会员分享,可在线阅读,更多相关《(本科)第6章字符与字符串ppt课件.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程主讲人:第6章 字符与字符串6.1 字符字符6.2 字符串字符串6.3 正则表达式正则表达式字符是电子计算机或无线电通信中字母、数字、字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位。符号的统称,其是数据结构中最小的数据存取单位。字符是计算机中经常用到的二进制编码形式,也是字符是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。计算机中最常用到的信息形式。字符的常用方法字符的常用方法字符类型是每种语言都支持的重要的数据类型,字符包括字母、数字符类型是每种语言都支持的重要的数据类型,字符包括字母、数字、运算符号、标点符号和其它符号,以及一
2、些功能性符号。字、运算符号、标点符号和其它符号,以及一些功能性符号。字符变量的定义使用字符变量的定义使用char关键字,关键字,Char类型的字符需要使用单引号类型的字符需要使用单引号括起来,例如括起来,例如 a、中中 等,还可以使用十六进制的转义符前缀等,还可以使用十六进制的转义符前缀“x”或或Unicode表示法前缀表示法前缀“u”表示字符常量。表示字符常量。char um=6;char letter1 =A;char letter2 =中中;实例描述:实例描述:创建一个控制台程序,输入一个字符,判断该字符是字创建一个控制台程序,输入一个字符,判断该字符是字母、数字还是其它字符,如果是字母
3、,且为大写字母,则将其转换为母、数字还是其它字符,如果是字母,且为大写字母,则将其转换为小写字母并打印。小写字母并打印。【实例实例6-1】对输入字符进行分类。对输入字符进行分类。static void Main(string args) /提示用户输入一个大写字母 Console.Write(请输入一个大写字母:); /读取用户输入的字符,Console.Read()函数读取进来的市该字符的unicode码,所以未整型数 int theCharCode=Console.Read(); /将unicode码转换为字符类型 char theChar = (char)theCharCode; /判断
4、字符是否为字母 if (Char.IsLetter(theChar) /判断用户输入的字符是否是大写字母 if (Char.IsUpper(theChar) /将该大写字母转换为小写字母 char theLowerChar =Char.ToLower(theChar) ; /打印该小写字母 Console.WriteLine(该字符为字母,且是大写字母,其对应的小写字母为: + theLowerChar); else Console.WriteLine(该字符为字母,且是小写字母); else if(Char.IsDigit(theChar)/判断字符是否为数字 Console.WriteLi
5、ne(该字符是数字!); else Console.WriteLine(该字符不是字母,也不是数字,是其它字符!); 字符类型变量或常量的值只能有一个字符,且不能是单引号或者反字符类型变量或常量的值只能有一个字符,且不能是单引号或者反斜杠(斜杠(),为了表示单引号、反斜杠、不可打印字符等特殊的字符,),为了表示单引号、反斜杠、不可打印字符等特殊的字符,C#提供了转义符,用字母前加提供了转义符,用字母前加构成转义符,如构成转义符,如、n等,使用等,使用转义符可以表示反斜杠等特殊字符。表转义符可以表示反斜杠等特殊字符。表6-2列出了列出了C#中常用的转义符。中常用的转义符。实例描述:实例描述:创建
6、一个控制台应用程序,要求仅使用一个创建一个控制台应用程序,要求仅使用一个Console.WriteLine()语句,分行打印语句,分行打印咏柳咏柳古诗。显示效果如图古诗。显示效果如图6-2所示。所示。【实例实例6-2】转义字符的使用。转义字符的使用。【实例实例6-2】转义字符的使用。转义字符的使用。static void Main(string args) /两个t制表符,用来实现缩进,rn用来实现换行 Console.WriteLine(tt碧玉妆成一树高,rntt万条垂下绿丝绦。rntt不知细叶谁裁出,rntt二月春风似剪刀。); Console.ReadLine(); 由数字、字母、下划
7、线组成的一串字符称之为字符串,在由数字、字母、下划线组成的一串字符称之为字符串,在C#中为中为string类型。类型。string类型是类型是System.String类的别名,因此类的别名,因此string和和String类型是等同类型是等同的。的。string类型的值可以通过两种形式进行分配,双引号和类型的值可以通过两种形式进行分配,双引号和引号:引号:string str = Hello world!;string str2 = 中原工学院软件学院!;string str = C:WindowsFonts;等价于:string str = C:WindowsFonts;字符串的前面可以加
8、字符串的前面可以加 (称作(称作“逐字字符串逐字字符串”)将转义字符()将转义字符()当作)当作普通字符对待,比如:普通字符对待,比如:int Compare(string strA, string strB)int Compare(string strA,string strB,bool ignoreCase)比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。的充要条件是:长度相等,并且各个对应位置上的字符都相等。C#中字符串比较有三种实现方法。中字符
9、串比较有三种实现方法。1.ComparestrAstrA和和strB : strB : 代表要比较的两个字符串。代表要比较的两个字符串。ignoreCase :ignoreCase :是一个布尔型的参数,如果这个参数的值是是一个布尔型的参数,如果这个参数的值是truetrue,那么在比较字,那么在比较字符串时就忽略大小写的差别。符串时就忽略大小写的差别。comparecompare是一个静态方法,所以在使用时,可以是一个静态方法,所以在使用时,可以直接调用。直接调用。CompareCompare方法返回一个整数,当方法返回一个整数,当strAstrBstrAstrBstrAstrB,返回,返回
10、1 1。int Compare(string strA, string strB)int Compare(string strA,string strB,bool ignoreCase)比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。的充要条件是:长度相等,并且各个对应位置上的字符都相等。C#中字符串比较有三种实现方法。中字符串比较有三种实现方法。2.CompareTo当前字符串当前字符串strAstrA与字符串与字符串strBstrB比较,如果比较,
11、如果strA=strBstrA=strB则返回则返回0 0;如果;如果strAstrBstrAstrB则返回则返回1;1;如果如果strAstrBstrAstrB则返回则返回-1-1。public bool Equals(string Value)public static bool Equals(string a,string b)比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等比较字符串是按照词典排序规则判断两个字符串的相对大小,两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。的充要条件是:长度相等,并且各个对应位置上的字符都相等。C#中字符串比较
12、有三种实现方法。中字符串比较有三种实现方法。3.Equals如果相等返回如果相等返回true , true , 不相等返回不相等返回falsefalse。static void Main(string args)string str1 = Console.ReadLine();string str2 = Console.ReadLine(); Console.WriteLine(String.Compare(str1, str2); Console.WriteLine(str1.CompareTo(str2); Console.WriteLine(str1.Equals(str2); Cons
13、ole.ReadLine();实例描述:实例描述:设计一个控制台应用程序,分别用上述三种字符串比较方法设计一个控制台应用程序,分别用上述三种字符串比较方法对用户输入的两个字符串进行比较,并查看结果。对用户输入的两个字符串进行比较,并查看结果。【实例实例6-3】比较用户输入的两个字符串。比较用户输入的两个字符串。字符串在输出时,为了保证输出的字符串能够按照某种特殊形式在电脑字符串在输出时,为了保证输出的字符串能够按照某种特殊形式在电脑上显示出来,需要对字符串进行输出前的格式化控制,常用格式化字符含上显示出来,需要对字符串进行输出前的格式化控制,常用格式化字符含义如表义如表6-4。实例描述:实例描
14、述:字符串格式化演示,对于格式化字符串这个问题,有很多的字符串格式化演示,对于格式化字符串这个问题,有很多的格式化规则和方法,在此列出部分格式化方法规则,并通过代码演示相关格式化规则和方法,在此列出部分格式化方法规则,并通过代码演示相关格式化规则。格式化规则。【实例实例6-4】字符串格式化。字符串格式化。【实例实例6-4】字符串格式化。字符串格式化。static void Main(string args) int x = 16;decimal y = 3.57m; string h = String.Format(item 0 sells at 1:C, x, y);/将y格式化 Conso
15、le.WriteLine(h); Console.WriteLine(); Console.WriteLine(Hello 0 1 2 3 4 5 6 7 8, 123, 45.67, true, Q, 4, 5, 6, 7, 8); /直接输出参数内容 string u = String.Format(Hello 0 1 2 3 4 5 6 7 8, 123, 45.67, true, Q, 4, 5, 6, 7, 8); /格式化为一个字符串后再输出 Console.WriteLine(u); Console.WriteLine(); Console.WriteLine(123); Con
16、sole.WriteLine(0, 123); Console.WriteLine(0:D3, 123); Console.WriteLine(); Console.WriteLine(0,5 1,5, 123, 456); /右对齐,不足字符数用空格代替 Console.WriteLine(0,-5 1,-5, 123, 456);/左对齐 Console.WriteLine(); Console.WriteLine(0,-10:D6 1,-10:D6, 123, 456); Console.WriteLine(); Console.WriteLine(/n0,-101,-3, Name,
17、Salary); Console.WriteLine(-); Console.WriteLine(0,-101,6, Bill, 123456); Console.WriteLine(0,-101,6, Polly, 7890); Console.ReadLine(); 获取字符串的前获取字符串的前i个字符,或者获取字符串当中的某些字符,或者将字个字符,或者获取字符串当中的某些字符,或者将字符串按照要求分割成符合需求的分字符串,这些方法都是在具体开发过程符串按照要求分割成符合需求的分字符串,这些方法都是在具体开发过程当中经常需要用到的实际字符串处理需求,使用当中经常需要用到的实际字符串处理需求
18、,使用Split()方法可以以指定字方法可以以指定字符来分割字符串。符来分割字符串。【实例实例6-5】从绝对路径中提取文件名。从绝对路径中提取文件名。实例描述:实例描述:创建一个控制台程序,从键盘上输入一个创建一个控制台程序,从键盘上输入一个Windows系统的文系统的文件绝对路径,要求从其中提取出文件名。件绝对路径,要求从其中提取出文件名。static void Main(string args) string strFileName = Console.ReadLine();string s = strFileName.Split();Console.WriteLine(ss.Length
19、 - 1);Console.ReadKey();【实例实例6-5】从绝对路径中提取文件名。从绝对路径中提取文件名。字符串.Insert(插入位置,插入子串);字符串.PadRight(总长度); /向又填充空格,以达到指定的总长度,返回结果为新字符串。字符串.PadRight(总长度,要填充的字符);/向右填充指定的字符,以达到指定的总长度。【实例实例6-6】马虎小明的文章:插入和填充字符串。马虎小明的文章:插入和填充字符串。static void Main(string args) /小明的原文 string str = 老天给了每个人一条命,一颗心,把命照看好, + 把心安顿好,人生即是圆
20、满把命照看好,就是要保护生命的单纯,+ 珍惜平凡生活。把心安顿好,就是要积累灵魂的财富,注重内在生活。; Console.WriteLine(str); Console.WriteLine(); /首行缩进:在前面追加四个空格(空格为半角,两个空格占一个汉字位置。) str = str.PadLeft(str.Length + 4); /尾部追加署名 str = str.Insert(str.Length, (小明); Console.WriteLine(str); Console.ReadLine(); 实例描述:实例描述:小明某天有感而发,提笔写下简短美文,但是粗心的他文章小明某天有感而发
21、,提笔写下简短美文,但是粗心的他文章首行忘了缩进,更夸张的是结尾也忘记了署名。请帮他修改文章,为其加首行忘了缩进,更夸张的是结尾也忘记了署名。请帮他修改文章,为其加上首行缩进和结尾署名。上首行缩进和结尾署名。string.Copy(要复制的字符串);字符串的复制是通过字符串的复制是通过Copy方法和方法和CopyTo方法来实现的,方法来实现的,Copy方法为静方法为静态方法,其语法格式如下:态方法,其语法格式如下:CopyTo(要复制字符的起始位置(从第几个字符开始往后复制(不包括第几个字符)),目标字符数组,目标数组中的开始存放位置,要复制的字符个数);CopyTo方法为实例方法,其语法格式
22、如下:方法为实例方法,其语法格式如下:实例描述:实例描述:演示字符串复制函数的使用。定义一个字符串,存放演示字符串复制函数的使用。定义一个字符串,存放一句诗句,调用多种方法实现该诗句的复制。一句诗句,调用多种方法实现该诗句的复制。static void Main(string args)string str = 疑是银河落九天; string copyStr = string.Copy(str); Console.WriteLine(copyStr); char array = new char20; str.CopyTo(0, array, 0, str.Length); /此方法无返回值
23、Console.WriteLine(array); Console.ReadLine();【实例实例6-7】字符串复制。字符串复制。Replace(char oldChar,char newChar)将此实例中的指定将此实例中的指定Unicode字符的所有匹配项替换为其它指定的字符的所有匹配项替换为其它指定的Unicode字符字符Replace(string oldValue,string newValue)将此实例中的指定将此实例中的指定String的所有匹配项替换为其它指定的的所有匹配项替换为其它指定的String。static void Main(string args) string
24、str = 小明 英语:95 数学:100, 李磊 英语:99 数学:96 ,韩美 英语:100 数学:95; str2 = str2.Replace(韩美, 韩梅梅); Console.WriteLine(str0 + n + str1 + n + str2); Console.ReadLine();【实例实例6-8】字符串替换:出错的成绩单。字符串替换:出错的成绩单。实例描述:实例描述:小明的老师要求小明整理同学成绩,可是粗心的他将小明的老师要求小明整理同学成绩,可是粗心的他将同学的名字搞错了,第三个学生同学的名字搞错了,第三个学生“韩美韩美”是个错误的名字,将该生是个错误的名字,将该生的
25、名字改正为的名字改正为“韩梅梅韩梅梅”。Replace(拟删除子字符串, );1.Replace字符串删除,即将字符串的部分或者全部内容清除掉,以下四种字符串删除,即将字符串的部分或者全部内容清除掉,以下四种方法可以从不同的应用场景实现字符串内容的删除。方法可以从不同的应用场景实现字符串内容的删除。2.RemoveRemove(int startIndex,int count);3.SubstringSubstring(int startIndex,int length);4.TrimTrim (); /将字符串两边的空格去掉后返回。static void Main(string args)
26、/诗句原文 string str = 床前明月光,rn疑是地上霜。rn疑是地上霜。rn举头望明月,rn低头思故乡。; Console.WriteLine(str); Console.WriteLine(); Console.WriteLine(); /LastIndexOf方法可从右向左查找指定的子字符串,并返回第一个字符的索引, /8为包括rn的要删除诗句的总长度 str = str.Remove(str.LastIndexOf(疑是地上霜), 8); Console.WriteLine(str); Console.ReadLine();【实例实例6-9】字符串删除。字符串删除。实例描述:实
27、例描述:有静思夜诗句,如图有静思夜诗句,如图6-10上半部分,上半部分,“疑是地上霜疑是地上霜”一句出现了两遍,试删除第二句一句出现了两遍,试删除第二句“疑是地上霜疑是地上霜,”并重新打印。并重新打印。String声明之后在内存中大小是不可修改的,也就意味着字符串一旦创声明之后在内存中大小是不可修改的,也就意味着字符串一旦创建就不可修改大小,每次使用建就不可修改大小,每次使用System.String类中的方法之一时,都要在内存类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行
28、重复修改的情况下,与创建新的对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用类。例能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用类。例如当在一个循环中将许多字符串连接在一起时,使用如当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提类可以提升性能。如果对字符串添加或删除操作不频繁,只是固定的升性能。如果对字符串添加或删除操作不频繁,只是固定的string累加的时累加的时候可以使用候可以使用String,毕竟,毕竟StringBuilder的初始化也是需要
29、时间的。但如果需的初始化也是需要时间的。但如果需要对字符串添加或删除操作比较频繁就应该采用要对字符串添加或删除操作比较频繁就应该采用StringBuilder。可以调用。可以调用StringBuilder对象的对象的ToString()方法将其转换成方法将其转换成String。static void Main(string args) StringBuilder sb = new StringBuilder(15, 20); sb.Append( Hello World); sb.Replace(o, a); Console.WriteLine(sb.ToString(); /输出完上面的处理
30、结果之后,可以继续对原有的StringBuilder对象进行操作. sb.AppendFormat(0, 1); Console.WriteLine(sb.ToString(); /注:所有的操作,操作的都是同一个对象,可能扩展过后的StringBuilder对象实例,会是新的对象实例 Console.ReadLine();【实例实例6-10】使用使用StringBuilder创建并修改字符串。创建并修改字符串。实例描述:实例描述:创建一个控制台应用程序,使用创建一个控制台应用程序,使用StringBuilder创建字创建字符串对象,并练习对其进行追加、替换等操作。符串对象,并练习对其进行追加
31、、替换等操作。正则表达式,又称规则表达式。正则表达式通常被用来检索、替正则表达式,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。它是对字符串操作的一种逻换那些符合某个模式(规则)的文本。它是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个合,组成一个“规则字符串规则字符串”,这个,这个“规则字符串规则字符串”用来表达对字用来表达对字符串的一种过滤逻辑,通常用来对字符串的合法性进行验证,如验符串的一种过滤逻辑,通常用来对字符串的合法性进行验证,如验证用户输入的电话号
32、码、身份证号是否是合法的。证用户输入的电话号码、身份证号是否是合法的。1正则表达式特点正则表达式特点(1)灵活性、逻辑性和功能性非常强。)灵活性、逻辑性和功能性非常强。(2)可以迅速地用极简单的方式达到字符串的复杂控制。)可以迅速地用极简单的方式达到字符串的复杂控制。(3)对于刚接触的人来说,比较晦涩难懂。)对于刚接触的人来说,比较晦涩难懂。2正则表达式功能正则表达式功能(1)给定的字符串是否符合正则表达式的过滤逻辑(称作)给定的字符串是否符合正则表达式的过滤逻辑(称作“匹匹配配”)。)。(2)可以通过正则表达式,从字符串中获取想要的特定部分。)可以通过正则表达式,从字符串中获取想要的特定部分
33、。3正则表达式书写。正则表达式书写。3正则表达式书写。正则表达式书写。1.静态静态Match方法方法C#中提供了正则表达式操作类中提供了正则表达式操作类RegEx,通常使用该类的几个方法,通常使用该类的几个方法来实现字符串的规则操作。主要有以下三种。来实现字符串的规则操作。主要有以下三种。Regex.Match(string input, string pattern);Regex.Match(string input, string pattern, RegexOptions options);第一种重载的参数表示:输入、模式;第一种重载的参数表示:输入、模式;第二种重载的参数表示:输入、模
34、式、第二种重载的参数表示:输入、模式、RegexOptions枚举的枚举的“按按位或位或”组合。组合。RegexOptions枚举的有效值如表枚举的有效值如表6-5所示。所示。2.静态静态Matches方法方法Matches方法的重载形式同静态的方法的重载形式同静态的Match方法,返回一个方法,返回一个MatchCollection,表示输入中,匹配模式的匹配的集合。,表示输入中,匹配模式的匹配的集合。IsMatch方法返回一个方法返回一个bool,重载形式同静态的,重载形式同静态的Matches,若输入,若输入中匹配模式,返回中匹配模式,返回true,否则返回,否则返回false。3.静态
35、静态IsMatch方法方法【实例实例6-11】验证手机号的合法性。验证手机号的合法性。实例描述:实例描述:创建一个控制台程序,用户输入一串号码,通过正则创建一个控制台程序,用户输入一串号码,通过正则表达式验证该串号码是否是合法的手机号码。表达式验证该串号码是否是合法的手机号码。实例分析:实例分析:当前合法手机号码的构成规则为:当前合法手机号码的构成规则为:(1)手机号码共)手机号码共11位数字;位数字;(2)首位均为)首位均为1;(3)第)第2位可以是位可以是3、4、5、6、7、8、9任何一个数字;任何一个数字;(4)后)后9位可以是任何数字。位可以是任何数字。因此,验证合法手机号的正则表达式
36、为:因此,验证合法手机号的正则表达式为:“13-9d9$”。【实例实例6-11】验证手机号的合法性。验证手机号的合法性。 static void Main(string args) string handset = null; Console.WriteLine(请输入待测试的号码:); handset = Console.ReadLine(); /验证输入的号码是否位手机号码 bool s = IsHandset(handset); Console.WriteLine(s); Console.ReadLine(); static bool IsHandset(string str_hands
37、et) return System.Text.RegularExpressions.Regex.IsMatch(str_handset, 13-9d9$); 【实例实例6-12】网页标题信息抽取。网页标题信息抽取。实例描述:实例描述:有如下网页源码,试从其中提取所有的新闻标题。有如下网页源码,试从其中提取所有的新闻标题。实例分析:实例分析:当前合法手机号码的构成规则为:当前合法手机号码的构成规则为:实例分析:实例分析:该问题典型的正则匹配问题,匹配的返回是一组信息,应考该问题典型的正则匹配问题,匹配的返回是一组信息,应考虑使用虑使用Regex.Matches()方法。观察上述页面源码,新闻标题
38、的最大特点,方法。观察上述页面源码,新闻标题的最大特点,就是以就是以“”开始、以开始、以“”结束,因此以此作为提取分隔符。结束,因此以此作为提取分隔符。【实例实例6-12】网页标题信息抽取。网页标题信息抽取。 static void Main(string args) string content = + + 新闻标题一2020.2.25 + + + 新闻标题二2020.2.24 + + + 新闻标题三2020.2.23 + + ; /构造正则匹配模板 string Pattern = (?=().sS*?(?=(); /使用Matches执行匹配 System.Text.RegularExp
39、ressions.MatchCollection Matches = System.Text.RegularExpressions.Regex.Matches( content, Pattern, System.Text.RegularExpressions.RegexOptions.ExplicitCapture /提高检索效率 ); /遍历Matches打印提取出来的信息 foreach (System.Text.RegularExpressions.Match math in Matches) Console.WriteLine(math.Value); Console.ReadLine();