在C#string关键字实际上指向.NET基类System.String。System.String是一个功能非常强大且用途非常广泛的基类,但它不是.NET库中唯一与字符串相关的类。
主要内容:
创建字符串——如果多次修改一个字符串,例如,在显示字符串或将其传递给其他方法或应用程序前,创建一个较长的字符串,String类就会变得效率低下。对于这种情况,应使用另一个类System.Text.StringBuilder,因为它是专门为这种情况设计的。
格式化表达式——格式化表达式将用于后面几章中Console.WriteLine()方法。格式化表达式使用两个有效的接口IFormatProvider和IFormattable来处理。在自己的类上实现这两个接口,实际上就可以定义自己的格式化序列,这样,Console.WriteLine()和类似的类就可以指定的方式显示类的值。
正则表达式——.NET提供一些非常复杂的类来识别字符串,或从长字符串中提取满足某些复杂条件的子字符串。例如,找出字符串中所有重复出现的某个字符或一组字符,或者找出以s开头日至少包含一个n的所有单词,或者找出遵循雇员ID或社会安全号码结构的字符串。
System.String类
System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作。
使用运算符重载可以连接字符串
string message1="Hello";
message1+=",There";
string message2=message1+"!";
C#允许使用类似于索引器的语法来提取指定的字符
string message="Hello";
char char4=message[4];
System.String类可完成常见的任务,如替换字符、删除空白和把字母变成大写形式等。
创建字符串
在StringBuilder类上可以处理仅限于替换和追加或删除字符串中的文本。在使用String类构造一个字符串时,要给它分配足够的内存来保存字符串。在默认情况下根据初始化StringBuilder实例时的字符串长度来确定内存的大小。
StringBuilder类有两个主要的属性:
Length指定字符串的实际长度;
Capacity指定字符串在分配的内存中的最大长度。使用StringBuilder类,需要在代码中引用System.Text类。
StringBuilder greetingBuilder=new StringBuilder("Hello from all the guys at wrox Press. ",150);
greetingBuilder.AppendFormat("We do hope you enjoy this book as much as we enjoyed writing it");
执行上面的代码时,它首先创建一个StringBuilder对象。
StringBuilder成员
StringBuilder类还有几个其他的构造函数,例如,可以只提供一个字符串:
StringBuilder sb=new StringBuilder("Hello");
用给定的容量创建一个空的StringBuilder类:
StringBuilder sb=new StringBuilder(20);
还有一只读属性MaxCapacity,它表示对给定的StrignBuilder实例的容量限制。
StringBuilder类主要的方法:
格式化字符串
.NET运行库定义一种标准方式:使用IFormattable接口。如果要在列表框或文本框中显示一个变量的值,一般就使用String.Format()方法来获得该变量的适当字符串表示,但用于请求所需格式的格式说明符与传递给Console.WriteLine()方法的格式相同。数字类型的常见格式说明符。
字符串的格式化
为说明如何格式化字符串,首先看一下下面的语句
Console.WriteLine("The double is {0,10:E} and the int contains{1}",d,i);
Console.WriteLine()方法只是把参数的完整类别传递给静态方法String.Format()。如果要在字符串中以其他格式化这些值,显示在一个文本框中,则也可以调用这个方法。实现带有3个参数Write Line()重载方法的代码如下:
pblic void WriteLine(string format,object argo,object arg1)
{
this.WriteLine(string.Format(this.FormatProvider,format,
new object[]{arg0,arg1}));
}
IFormattable接口只定义一个方法,该方法也命名为ToString(),它带有两个参数,这与System.Object版本的ToString()方法不同,它不带参数。IFormattable接口的定义:
iterface IFormattable
{
string ToString(string format,IFormatProvider formatProvider);
}
Console.WriteLine("The double is {0,10:E} and the int contains {1}",d,i);
整个字符串格式化过程: