您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 统计图表 > 第7章--字符串和正则表达式
第7章字符串和正则表达式•字符串是应用程序和用户交互的主要方式,是评价一个编程语言非常重要的内容。•.NET提供了几个类来快速实现字符串操作,包括String类,System.Text命名空间等。本章将对这一部分内容进行介绍。7.1字符串•字符串(String)是最常用的字符串操作类,可以帮助程序设计人员完成绝大部分的字符串操作功能,使用方便。如图所示为String类的属性和常用方法。7.1.1简介•C#中表示字符串的关键字为string,它是String类的别名。•string类型表示Unicode字符的字符串。字符串是不可变的-字符串对象一旦创建,其内容就不能更改。string类型中定义了比较运算符(==和!=),使得比较string对象的值更为直观和简单。•Unicode(统一码、万国码、单一码):是计算机科学领域里的一项业界标准,包括字符集、编码方案等。每个字符至少用2个字节(16位)表示。–字母’a’的Unicode编码是0x0061(2个字节即16位),十进制是97。–字母’a’的ASCII编码是0x61(2个字节即16位),十进制也是97。7.1.2比较字符串•比较字符串是指按照字典排序规则,判定两个字符串的相对大小。按照字典规则,在一本英文字典中,出现在前面的单词小于出现在后面的单词。在String类中,常用的比较字符串的方法包括Compare,CompareTo,CompareOrdinal以及Equals。•1.Compare方法Compare方法是String类的静态方法,用于全面比较两个字符串对象,包括6种重载方式。•2.CompareTo方法CompareTo方法将当前字符串对象与另一个字符串对象作比较,其作用与Compare类似,返回值也相同。见P107例。7.1.2比较字符串•3.Equals方法Equals方法用于方便地判断两个字符串是否相同,有以下两种重载形式:(1)publicboolEquals(string);(2)publicstaticboolEquals(string,string)。如果两个字符串相等,Equals()返回值为True;否则,返回False。•4.比较运算符String支持两个比较运算符“==”和“!=”,用于判断两个字符是否相等和不等,区分大小写。见P108例。7.1.3格式化字符串•Format方法用于创建格式化的字符串以及连接多个字符串对象。Format与C语言中的sprintf()函数有类似之处。Format方法也有多个重载形式,最常用的为:publicstaticstringFormat(stringformat,paramsobject[]args);•参数format用于指定返回字符串的格式,而args为一系列变量参数。例:(见P108例)1.//格式化串2.StringnewStr=String.Format({0},{1}!,strA,strB);//输出为Hello,World!3.Console.WriteLine(newStr);7.1.4连接字符串•两个连接字符串的静态方法:Concat和Join。•1.Concat方法Concat方法用于连接两个或多个字符串。Concat方法也有多个重载形式,最常用例:publicstaticstringConcat(paramsstring[]values);•2.Join方法Join方法利用一个字符数组和一个分隔符构造新的字符串。常用形式为:(见P109例)publicstaticstringJoin(stringseparator,string[]value);•3.连接运算符+连接运算符“+”可以方便地连接多个字符串。例如,用“+”把“Hello”和“World”连接起来:“Hello”+“World”7.1.5分割字符串•使用前面介绍的Join方法,可以利用一个分隔符把多个字符串连接起来。反过来,使用Split方法可以把一个整串,按照某个分隔符分裂成一系列小的字符串。例如,把整串“Hello^^World”按照字符‘^’进行分裂,可以得到3个小的字符串,即“Hello”、“”(空串)和“World”:(见P110例)•Split有多个重载形式,最常用的为:publicstring[]Split(paramschar[]separator);7.1.6插入字符串•String类包含了在一个字符串中插入新元素的方法,可以用Insert在任意位置插入任意字符。而使用PadLeft/PadRight方法,可以在一个字符串的左右两侧进行字符填充。•1.Insert方法:在任意位置插入任意字符•2.PadLeft/PadRight方法:字符填充•(见P110例)7.1.7删除字符串•1.Remove方法Remove方法从一个字符串的制定位置开始,删除指定数量的字符。2.Trim/TrimStart/TrimEnd方法若想把一个字符串首尾处的一些特殊字符剪切掉,如去掉一个字符串首尾的空格等,可以使用String的Trim方法。(见P111例)7.1.8遍历字符串•遍历子字符串(简称子串)是指在一个字符串中寻找其中包含的子串或者某个字符,在String类中,常用的定位子串和字符的方法包括StartWith/EndsWith、IndexOf/LastIndexOf以及IndexOfAny/LastIndexOfAny。•1.StartWith/EndsWith方法•2.IndexOf/LastIndexOf•3.IndexOfAny/LastIndexOfAny•例,下面语句的执行结果为4:strings=C:\\k\\a.exe;Console.WriteLine(s.LastIndexOf(‘\\'));作用:分解文件路径与文件名。7.1.9复制字符串•String类包含了在复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作。•1.Copy方法若想把一个字符串复制到另一个字符数组中,可以使用String的静态方法Copy来实现,其形式为:publicstaticstringCopy(stringstr);•2.CopyTo方法CopyTo方法可以实现Copy同样的功能,但功能更为丰富,可以复制源字符串中的一部分到一个字符数组中。另外,CopyTo不是静态方法,其形式为:publicvoidCopyTo(intsourceIndex,char[]destination,intdestinationIndex,intcount);7.1.10大小写转换•String提供了方便转换字符串中所有字符大小写的方法ToUpper和ToLower。这两个方法没有输入参数,使用也非常简单。•下例首先把“Hello”转换为“HELLO”,然后再变为小写形式“hello”。2.newStr=strA.ToUpper();3.Console.WriteLine(newStr);//输出为HELLO4.newStr=strA.ToLower();5.Console.WriteLine(newStr);//输出为hello7.2StringBuilder类•与String类相比,System.Text.StringBuilder类可以实现动态字符串。此处,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟新的内存空间,而是直接在原StringBuilder对象的基础上进行修改。StringBuilder类属性和常用方法如图所示。7.2.1创建StringBuilder对象•StringBuilder类位于命名空间System.Text中,使用时,可以在文件头通过using语句引入该命名空间:usingSystem.Text;•声明StringBuilder对象需要使用new关键字,并可以对其进行初始化。如下语句声明了一个StringBuilder对象myStringBuilder,并初始化为“Hello”。StringBuildermyStringBuilder=newStringBuilder(Hello);7.2.2追加字符串•1.Append方法Append方法实现简单的追加功能,常用形式为:publicStringBuilderAppend(objectvalue);•2.AppendFormat方法AppendFoamat方法可以实现对追加部分字符串的格式化,可以定义变量的格式,并将格式化后的字符串追加在StringBuilder后面。常用形式为:StringBuilderAppendFormat(stringformat,paramsobject[]args);7.2.3插入字符串•StringBuilder的插入操作是指将新的字符串插入到当前StringBuilder字符串的指定位置,如“Hello”变为“Heeeello”。可以使用StringBuilder类的Insert方法来实现这个功能,常用形式为:publicStringBuilderInsert(intindex,objectvalue);其中,参数index指定所要插入的位置,并从0开始索引,如index=1,则会在原字符串的第2个字符之前进行插入操作;同Append一样,参数value并不仅是只可取字符串类型。7.2.4删除字符串•StringBuilder的删除操作可以从当前StringBuilder字符串的指定位置,删除一定数量的字符,例如把“Heeeello”变为“Hello”。可以使用StringBuilder类的Remove方法来实现这个功能,常用形式为:publicStringBuilderRemove(intstartIndex,intlength);7.3正则表达式•正则表达式是一个非常大的题目,许多的编程语言和工具都支持正则表达式,.NET类库名字空间System.Text.RegularExpressions包括了一系列可以充分发挥正则表达式威力的类,如图5-3所示。•本节,首先介绍正则表达式的含义,然后简单介绍如何使用Regex类来实现字符串的模式匹配,并给出构造正则表达式的技术。除此之外,还可以充分利用RegularExpression空间中的其他类,实现诸如模式查找、模式替换等更为强大的功能。本书只是抛砖引玉,不对其作更深入的探讨。7.3.1正则表达式简介•正则表达式是一种可以用于模式匹配的工具。简单地说,正则表达式就是一套规则,用于判定其他的元素是否符合它。•例如,在网络应用上的一个用户注册页面中(如论坛或者交友网站的注册页面),可能有“电子邮件”这一项需要用户填写。Web系统需要判定用户所填写的电子邮件地址是否合法,即是否符合电子邮件地址的规则。众所周知,电子邮件的格式形如:zhangsan@sina.com•可以抽象为这样的规则:非空字符序列+'@'+非空字符序列+'.'+com|cn|net7.3.2正则表达式(Regex)类•Regex类包含若干静态方法,用于使用正则表达式进行字符串匹配,常用属性和方法如图5-4所示。•最常用的方法为Match,在输入字符串参数中搜索正则表达式的匹配项,并将匹配成功的结果作为单个Match对象返回。常用形式为:publicstaticMatchMatch(stringinput,stringpattern);7.3.3构造正则表达式•正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串,如上一节示例中的正则表达式“[a-zA-Z]+@[a-zA-Z]+\.com$”,含义如下:•(1)“[a-zA-Z]+”:指包含1个或多个大小写英文字母的字符串;•(2)com$:指以“com”结尾的字符串;•(3)\.:使用转移字符“\”来表示一个普通的字符“.”,因为“.”在正则表达式中也具有特殊的作用。注意在使用转移字符“\”时,需要在字符串前加上“@”符号。7.3.4示例:验证URL•本小节实现利用C#的正则表达式验证一个U
本文标题:第7章--字符串和正则表达式
链接地址:https://www.777doc.com/doc-3925279 .html