



 4.1 C#字符串类型
    4.1 C#字符串类型
   Visual C#提供了String类型,String和StringBuilder两种类来对字符串进行处理。string是.NET Framework中String的别名,string也是C#基本类型,String是Visual C#中一个功能非常强大、用途非常广泛的基类。string与String实质上没什么区别,只是在C#的编译时,会自动的把string转化为System.String,多做一次转换。因此,在编码时推荐使用String。StringBuilder类主要用于长字符串的操作,StringBuilder表示可变字符串,它允许用户有效地对字符串的字符执行动态操作,有效地缩减字符串的大小或者更改字符串中的字符。
格式化字符串是指字符串可以按照设定的格式输出显示。在C#字符串操作中,经常在类和结构中执行ToString()方法来显示给定变量的内容。但是,根据实际需求,用户常常希望以各种可能的方式显示变量的内容,在不同的文化或地区背景中有不同的格式。例如.NET System.DateTime基类,用格式化字符串操作可以把日期显示为2010-5-26、2010年5月26日、5月6日、2010年5月等格式。格式化字符串可以用ToString()方法和Format()方法。
(1)ToString()格式:
 
   参数说明:
□ format:用来指定字符串所要格式化的形式。
□ ToString()是对实例对象本身进行格式化。
用法:
 
   (2)Format()格式:
 
   □ 参数说明:format用来指定字符串所要格式化的形式。Obj表示要被格式化的对象。
□ 返回值:format的一个副本。
用法:
 
   首先介绍数字的格式化,表4-1所示是数字格式字符的相关说明。
表4-1 格式化数字符属性表
 
   【实例4-1】 本例将创建一个控制台应用程序,实现格式化数字。
(1)创建控制台应用程序。
启动Visual Studio 2010,选择“文件”→“新建”菜单命令,在“新建”选项卡中选择“项目”,创建一个名称为“4.1”的控制台应用程序。
(2)在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第4~14行按照不同的格式将数字格式化输出。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-1所示。
 
    图4-1 格式化数字输出结果
格式化日期字符属性表如表4-2所示。
表4-2 格式化日期字符属性表
 
   【实例4-2】 本例将创建一个控制台应用程序,实现格式化数字的例子,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第4~18行按照不同的日期格式将当前日期格式化输出。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-2所示。
 
    图4-2 格式化日期输出结果
C#中字符串的比较用String类实现,String类提供了多种方法对字符串进行比较,这里重点对常用4种方法进行介绍,分别是Compare()、CompareTo()、CompareOrdinal()、Equals()。
Compare()方法用来比较两个字符串是否相等,Compare()提供了将当前字符串对象与另一个字符串或对象进行全面比较的方法,此方法识别区域性。可以使用此方法来比较两个字符串或两个字符串的子串。另外,还提供了考虑或忽略大小写与区域性差异的重载。Compare()方法是CompareTo()方法的静态版本。Compare()方法有很多个重载方法,下面介绍最常用的方法。格式:
 
   □ 参数说明:str1和str2代表要比较的两个字符串。
□ 返回值:如果str1等于str2则返回0,如果str1大于str2则返回1,如果str1小于str2返回-1。
Tips 比较字符串,并不是比较字符串的长度,而是从首字符开始逐个比较字符的大小,如果已分出大小则结束比较,大于则返回1,小于则返回-1,如果相等则继续比较下一个字符直到分出大小或到字符串尾,如仍相等则返回0。
字符的大小,如果是英文字母按照a到z的顺序依次增大,也就是a小于b,小写字母小于大写字母,小写字母大于单个数字字符;如果是汉字比较,则比较汉语拼音字母的大小。
【实例4-3】 本例将创建一个控制台应用程序,声明两个字符串变量,然后使用Compare方法比较两个字符串大小,在控制台项目Program.cs文件的main函数中输入下面代码:
 
     
    【代码解析】 第16行使用Compare()函数比较两字符串,输出比较结果。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-3所示。
 
    图4-3 比较字符串Compare()方法输出结果
CompareTo()方法与Compare()方法相似,都可以比较两个字符串是否相等,不同的是CompareTo()方法以实例对象本身与指定的字符串作比较。格式:
 
   □ 参数说明:str表示与此字符串相比较的字符串。
□ 返回值:返回值与Compare()方法相同。
【实例4-4】 本例将创建一个控制台应用程序,声明两个字符串变量,然后使用CompareTo()方法比较两个字符串大小,在控制台项目Program.cs文件的main函数中输入下面代码。
 
     
    【代码解析】 第16行使用CompareTo()函数比较两字符串,输出比较结果。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-4所示。
 
    图4-4 比较字符串CompareTo()方法输出结果
Equals()方法主要用于比较两个字符串是否相同,如果相同返回值为true,否则为false。只要使用“=”运算符,就会调用Equals()方法,Equals()方法与“=”是等价的。其常用的两种语法格式如下:
 
   □ 参数说明:str表示与实例比较的字符串。str1和str2表示要进行比较的两个字符串。
□ 返回值:如果两个值相同,则为true,否则为false。
【实例4-5】 本例将创建一个控制台应用程序,声明两个字符串变量,然后使用Equals()方法比较两个字符串是否相同,在控制台项目Program.cs文件的main函数中输入下面代码:
 
     
    【代码解析】 第16行使用Equals()函数比较两个字符串,输出比较结果。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-5所示。
 
    图4-5 比较字符串Equals()方法输出结果
CompareOrdinal()方法比较两个字符串对象而不考虑本地区域性。其常用语法格式如下:
 
   □ 参数说明:str1和str2代表要比较的两个字符串。
□ 返回值:如果str1等于str2则返回0,如果不等则返回str1减去str2的值。
【实例4-6】 本例将创建一个控制台应用程序,声明两个字符串变量,然后使用CompareOrdinal()方法比较两个字符串是否相同,如果str1等于str2则返回0,如果不等则返回str1减去str2的值,在控制台项目Program.cs文件的main函数中输入下面代码:
 
     
    【代码解析】 第16行使用CompareOrdinal()函数比较两个字符串,输出比较结果。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-6所示。
 
    图4-6 比较字符串CompareOrdinal()方法输出结果
C#为开发用户提供了两种方法实现字符串的连接,第一种使用“+”号连接字符串,这种方法使用起来非常简单,但在连接过程中会将新的组合字符串分配新的空间,在一个较大的循环中会占用过多的资源,因此“+”号一般适用于低数量级字符串连接;另一种使用StringBuild类的Append()方法来连接字符串,此方法对字符串的处理效率要比“+”号高很多,如果对大量字符串进行连接,建议使用Append()方法。下面详细介绍这两种方法。
“+”号用来连接两个字符串,使用格式如str1+str2。
【实例4-7】 本例将创建一个控制台应用程序,控制台输出两个字符串的连接,在控制台项目Program.cs文件的main函数中输入下面代码。
 
   【代码解析】 第15行将两个字符串连接在一起。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的【启动调试】按钮,显示结果如图4-7所示。
 
    图4-7 运行结果
Append()方法属于StringBuild类,该方法的功能是使用实例对象本身与指定的字符串连接,语法格式如下:
 
   □ 参数说明:str代表要连接的字符串。
□ 返回值:该方法返回一个StringBuild对象。
【实例4-8】 本例将创建一个控制台应用程序,控制台输出两个字符串的连接,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第14行实例化StringBuilder类对象sb。第17~18行将两个字符串使用StringBuilder的对象连接在一起。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-8所示。
 
    图4-8 运行结果
在程序开发中可能经常需要对字符串进行复制操作,C#提供了Copy()和CopyTo()方法来实现对字符串的复制,这两个方法都属于String类。下面详细介绍这两种方法。
CopyTo()方法将指定段中的字符复制到目标字符数组的指定段中。复制StringBuilder类的实例的内容可以使用CopyTo()方法,语法格式如下:
 
   参数说明:
□ sourceIndex指定开始复制字符的位置。
□ destination指定要将字符复制到的字符数组。
□ destinationIndex指定要将字符复制到的destination参数中的起始位置。
□ count指定要复制的字符数。
【实例4-9】 本例将创建一个控制台应用程序,在控制台项目程序中,把str1字符串“HelloWorld”中的“World”复制到str2中,并在str2中从第2个元素开始存放,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第14行从第7个字符开始,复制5个字符。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-9所示。
 
    图4-9 运行结果
Copy()方法创建一个与指定的String具有相同值的String的新实例,此方法是一个静态方法,其语法格式如下:
 
   □ 参数说明:str为要复制的 String。
□ 返回值:与str具有相同值的新String。
【实例4-10】 本例将创建一个控制台应用程序,在控制台项目程序中,把str1字符串“HelloWorld”,复制到str2中,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第14行将字符串str1复制到str2中。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-10所示。
 
    图4-10 运行结果
C#提供了Substring()方法来截取字符串,该方法属于String类。通过Substring()可以截取字符串中指定位置和指定长度的字符。其语法格式如下:
 
   □ 参数说明:startIndex指定要截取子字符串起始位置的索引;length指定要截取的长度。
□ 返回值:返回一个String,它等于此实例中从startIndex开始的长度为length的子字符串,如果startIndex等于此实例的长度且length为零,则为空。
【实例4-11】 本例将创建一个控制台应用程序,声明两个string类型的变量str1和str2,并将str1赋值为“C#截取字符串实例”,然后使用Substring方法从str1字符串的索引2处开始截取5个字符,然后输出,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第14行截取字符串。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-11所示。
 
    图4-11 运行结果
C#为开发人员提供了Replace()方法来实现字符串的替换,Replace()方法可以替换掉一个字符串中的某些特定字符或者子串。其语法格式如下:
 
   参数说明如表4-3所示。
表4-3 Replace方法参数表
 
   第一种格式主要用于替换字符串中的单个字符,第二种格式主要替换字符串中的子串。当然子串也可以是单个字符,即也可以用第二种格式实现单个字符的替换。下面用实例来说明。
【实例4-12】 本例将创建一个控制台应用程序,声明一个string类型变量str1,并赋值为“Hello Boys”;然后使用Replace方法的第一种语法格式将字符串str1中的“o”替换成“#”,使用第二种语法格式将字符串str1中的“Boys”替换成“Girls”,使用第二种语法格式将字符串str1中的“o”替换为“test”;最后分别输出替换后的字符串,在控制台项目Program.cs文件的main函数中输入下面代码:
 
   【代码解析】 第15行替换单个字符,第16行替换字符串。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-12所示。
 
    图4-12 替换字符串输出结果
在程序设计过程中经常需要分割字符串,如获取字符串“河南,山东,广东,四川,江苏”中的单个省份,这就需要对字符串进行分割。C#提供了String类的Split方法来实现,该方法用于分割字符串,其返回值是包含所有分割子字符串的数组对象,可以通过数组取得所有分割的子字符串。Split方法语法格式如下:
 
   □ 参数说明:separator为一个字符数组,用于包含分隔符。
□ 返回值:返回一个数组,数组中存放分割后的单个子字符串,这些子字符串由separator中的一个或多个字符分割。
下面用实例来说明。
【实例4-13】 本例将创建一个控制台应用程序,声明一个string类型变量str1,赋值为“河南,山东,广东,四川,江苏”,分割变量str1,并输出分割后的字符串,在控制台项目Program.cs文件的main函数中输入下面代码:
 
     
    【代码解析】 第15~16行分割字符串。
【运行效果】 代码编写完成之后,按“F5”键或者单击工具栏中的“启动调试”按钮,显示结果如图4-13所示。
 
    图4-13 Split分割字符输出结果