C#编程(四十四)----------string和stringbuilder

System.String

首先string类是静态的,System.String是最常用的字符串操作类,可以帮助开发者完成绝大部分的字符串操作功能,使用方便.

1.比较字符串

比较字符串是指按照字典排序规则,判定两个字符的相对大小.按照点点规则,在一本英文字典中,出现在前面的单词小于出现在后面的单词.string类中,常用的比较字符串的方法包括Compare,CompareTo,CompareOrdinal以及Equals,下面进行详细的介绍.

Compare()方法是string类的静态方法,用于全面比较两个两个字符串对象,包括6种重载方法.CompareTo()方法将当前字符串对象与另一个 对象做比较,其作用与Compare类似,返回值也相同.CompareToCompare相比,区别在于:CompareTO不是静态方法,可以通过一个string对象调用;CompareTo没有重载形式,只能按照大小写敏感方法比较两个整串.

Equals()方法用于方便的判断两个字符串是否相同,有两种重载形式:

public bool Equals(string str)

public static bool Equals(string str1,string str2);

如果两个字符串相等,Equals()返回值为true;否则,返回False.

string支持两个比较运算符”==”和”!=”,分别用于判定两个字符串是否相等和不等,并区分大小写.相对于上面介绍的方法,这两个运算符使用起来更加直观和方便.

 

2.定位字符串和子串

定位子串是指在一个字符串寻找其中包含的子串或者某个字符,string类中,常用的定位子串和字符的方法包括:StartsWith(),EndsWith(),IndexOf(),LastIndxOf(),IndexOfAny()以及LastIndexOf(),下面进行详细介绍:

StartsWith()/EndsWith()方法

可以判定一个字符串对象是否以另一个子做富川开头,如果是返回True;否则返回false,其定义为:public bool StartsWith(string value) //参数value即待判定的子字符串.

 

IndexOf()/LastIndexOf()

IndexOf()方法用于搜索一个字符串,某个特定的字符串或子串第一次出现的位置,该方法区分大小写,并从字符串的首字符以0技术.如果字符串中不包含这个字符或子字符串,则返回-1.共有如下6中重载形式:

定位子串:

int IndexOf(char value)

int IndexOf(char value , int StartIndex)

int IndexOf(char value,int startIndex int count)

定位子串:

int IndexOf(stringvalue)

int IndexOf(string value , int StartIndex)

int IndexOf(stringvalue,int startIndex int count)

在上述的重载行驶中,其参数含义如下

value:待定位的字符或者子串

startIndex:在总串中开始搜索的起始位置

Count:在总串中从起始位置 开始搜索的字符数.

 

IndexOfAny()/LastIndexOfAny()

其功能同IndexOf类似,其区别在于,可以搜索在一个字符串中,出现在一个字符串数组中的任意字符第一次出现的位置.同样,该方法区分大小写,并从字符串的首字符开始以0技术.如果字符串中不包括这个字符或子串,则返回-1.

IndexOfAny类似,LastIndexOfAny用于搜索在一个字符串中,出现在一个字符数组中任意字符最后一次出现的位置。

 

案例:

            string s = "hello";

            char[] arr = { 'H','e','l'};

            int i1 = s.IndexOfAny(arr);

            int i2 = s.LastIndexOfAny(arr);

            Console.WriteLine("IndexOfAny的结果是 :{0}  \nLastIndexOfAny的结果是 :{1}",i1,i2);

            Console.ReadKey();

 

.IndexOfAny有三种重载形式:

int IndexOfAny(char [] anyOf)

int IndexOfAny(char [] anyOf,int startIndex)

int IndexOfAny(char [] anyOf,int startIndex,int count)

在上述重载行驶中,其参数含义如下:

anyOf:待定位的字符或者子串,方法将返回这个数组中任意一个字符第一次出现的位置

startIndex:在总串中开始搜索得起始位置

Count:在总串中从起始位置开始搜索的字符串

 

3.格式化字符串

Format()方法用于创建格式化的字符串以及连接多个字符串对象.FOrmat()方也有多个重载形式,最常用的是:

public static string Format(string format,params object [] args);

其中,参数format用于指定返回字符串的格式,args为一系列变量参数.可以通过下面的实例来掌握其用法.

            string strA = "hello", strB = "world",newStr="";

            newStr = string.Format("{0},{1}",strA,strB);

            Console.WriteLine(newStr);

format参数中包含一些用大括号括起来的数字,{0},{1},这些数字分别一一对应于args参数数组中的变量.在生成结构字符串时,将使用这些变量代替{i}.需要说明的是,这些变量并不是非得为string类型.在特定的应用中,format方法非常方便.例如,要输出一定个事的瞬间字符串,便可以使用format()方法,代码如下:

            newStr = string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);

            Console.WriteLine(newStr);

 

其中,格式字符串”yyyy:MM:dd”指定返回时间的格式形如”2015:7:21”.

 

4.连接字符串

Concat()方法用户谅解两个或多个字符串,Concat()方法也有多个重载形式,最常用的为:public static Concat(params string [] values);//其中values用于指定索要连接的多个字符串,可以死通过下面的实例来掌握其使用方法.

            string newStr = string.Concat("hello"," ","world");

            Console.WriteLine(newStr);

 

Join()方法利用一个字符数组和一个分割字符串构造新的字符串.常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开.Join()方法的常用形式:public static string Join(string separator ,string [] values);//其中,参数separator 为指定的分隔符,values用于指定所要连接的多个字符串数组,案例:

            string strA = "hello", strB = "world",newStr="";

            //newStr = string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);

            //string newStr = string.Concat("hello"," ","world");

            string []strArr={strA,strB};

//使用^^分隔字符串数组

            newStr = string.Join("^^",strArr);

            Console.WriteLine(newStr);

            Console.ReadKey();

 

 

连接运算符”+”

string支持连接运算符”+”,可以方便的连接多个字符串,例如,下面把”hello”和”world”连接起来;

            string newStr = "hello" + ",world";

            Console.WriteLine(newStr);

5.分割字符串

使用前面介绍的Join方法,可以利用一个分隔符把多个字符串连接起来.反过来,使用Split方法可以把一个整串,按照某个分隔符,分裂成一系列小的字符串.例如,把整串”hello^^world”按照字符”^”进行分割,可以得到三个小的字符串,即”hello”,””(空串),”world”.

Split()方法有多个重载形式,最常用的形式为:

public string [] Split(params char [] separator)

其中参数separator数组包含分隔符.下例把”hello^^world”进行分割:

            string newStr = "hello^^world";

            char[] separator = { '^'};

            string[] splitStrings = new string[100];

            splitStrings = newStr.Split(separator);

            int i = 0;

            while (i<splitStrings.Length)

            {

                Console.WriteLine("item:{0}  {1}",i,splitStrings[i]);

                i++;

            }

 

 

 

6.插入和填充字符串

string类包含了在一个字符串中插入新元素的方法,可以用insert()方法在任意位置插入任意字符.Insert()方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串,Insert()方法也有多个虫子形式,最常用的是:

public string Insert(int startIndex, string value);

其中,参数startIndex用于指定所要插入的位置,0开始索引;value指定所要插入的字符串.

下例在”hello”的字符”h”后面插入”world”,最后的结果为”hworldello”:

            string newStr = "";

            newStr = "hello".Insert(1, "world");

            Console.WriteLine(newStr);

 

 

7.删除和剪切字符串

Remove()方法从一个字符串的指定位置开始,删除指定数量的字符.最常用的形式为:

public string Remove(int startIndex,int count);

其中,参数startIndex用于指定开始删除的位置,0开始索引;count指定删除的字符数量.下例中,将”hello”中的”ell”删除:

            string newStr = "hello";

            newStr = newStr.Remove(1, 3);

            Console.WriteLine(newStr);

 

Trim()方法

若想把一个字符串首尾处的一些特殊字符删除,如去掉一个字符串首尾的空格等,可以使用stringTrim()方法.形式:

public string Trim();

public string Trim(params char [] trimChars);

其中,参数trimChars数组包含了指定要去除的字符,如果缺省,则删除空格符号.下例中,实现了对”@hello#$”的净化.

            char[] trimChars = { '@','#','$'};

            string str = "@hello#$";

            string newStr = str.Trim(trimChars);

            Console.WriteLine(newStr);

8.复制字符串

string类包含了复制字符串方法CopyCopyTo,可以完成对一个字符串及其一部分的复制操作.

Copy()方法可以把一个字符串复制到另一个字符数组中,形式为:public string Copy(string str);其中,参数str为需要复制的源字符串,方法返回目标字符串.

CopyTo()方法可以实现Copy同样的功能,但功能更为丰富,可以赋值字符串的一部分到一个字符数组中.另外CopyTo不是静态方法,其形式为:

public void CopyTo(int sourceIndex,char [] destination,int destinationIndex,int count);

其中,参数sourceIndex为需要复制的字符起始位置,destination为目标字符数组,destinationIndex指定目标数组中的开始存放位置,count指定要复制的字符个数.

案例:

            char[] newCharArr = new char[100];

            "hello".CopyTo(2, newCharArr, 0, 3);

            Console.WriteLine(newCharArr);

 

分析:把”hello”中的llo复制到newCharArr.

 

 

9.替换字符串

要替换一个字符串中的某些特定字符或者某个子串,可以使用Replcace()方法来实现,其形式为:

public string Replace(char oldChar,char newStr);

public string Replac(string oldValue,string newValue);

其中,参数oldCharoldValue为待替换的字符和子串,newCharnewValue为替换后的新字符和新子串:

            string newStr = "hello".Replace("ll", "r");

            Console.WriteLine(newStr);

 

 

10.更改大小写:

string提供了方便转换字符串中所有字符大小写的方法ToUpperTOLower.这两个方法没有输入参数,使用也非常方便.案例:

            Console.WriteLine("hello".ToUpper());

            Console.WriteLine("HELLO".ToLower());

 

 

 

总结:本节介绍了最常用的String类,并从比较、定位子串、格式化、连接、分裂、插入、删除、复制、大小写转换10个方面介绍了其方法。之所以称String对象为静态串,是因为一旦定义一个String对象,就是不可改变的。在使用其方法(如插入、删除操作)时,都要在内在中创建一个新的String对象,而不是在原对象的基础上进行修改,这就需要开辟新的内存空间。如果需要经常进行串修改操作,使用String类无疑是非常耗费资源的,这时需要使用StringBuilder类。

创建新的string对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.StringBuikder.例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能.

通过用一个重载的构造函数方法初始化变量,可以创建StringBuilder类的新实例,示例如下:

StringBuilder sb=new StringBuilder(“hello,world”);

 

设置容量和长度

虽然StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是你可以为它容纳的最大字符数指定一个值,此值称为该对象的容量,不应将它与当前StringBuilder 对象容纳的字符串长度混淆在一起.例如,可以创建StringBuilder类的带字符串”hello”(长度为5)的一个新实例,同时可以指定该对象的最大容量为25.当修改StringBuilder,在达到容量之前,他不会为其自己重新分配空间.当达到容量时,将自动分配新的空间且容量翻倍.可以使用重载的构造函数之一来指定StringBuilder类的容量,下例指定可以将StringBuilder对象扩充到最大25个空白.

StringBuilder sb=new StringBuilder(“hello,world”,25);

 

另外,可以使用读/Capacity属性来设置对象的最大长度.下例代码使用Capacity属性来定义对象的最大长度.

sb.Capacity=25;

 

EnsureCapacity方法可用来检查当前StringBuilder的容量

也可以查看或设置Length属性.如果将Length属性设置为大于Capacity属性的值,则自动将Capacity属性更改为与Length属性相同的值.如果将Length属性设置为小于当前StringBuilder 对象内的字符串长度的值,则会缩短该字符串.

 

修改 StringBuilder 字符串

方法名 使用

StringBuilder.Append 将信息追加到当前 StringBuilder 的结尾。

StringBuilder.AppendFormat 用带格式文本替换字符串中传递的格式说明符。

StringBuilder.Insert 将字符串或对象插入到当前 StringBuilder 对象的指定索引处。

StringBuilder.Remove 从当前 StringBuilder 对象中移除指定数量的字符。

StringBuilder.Replace 替换指定索引处的指定字符。

 

 

Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。以下示例将一个 StringBuilder 对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a beautiful day."); Console.WriteLine(MyStringBuilder);

  此示例将 Hello World! What a beautiful day. 显示到控制台。

AppendFormat

  AppendFormat 方法将文本添加到 StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder 的后面。以下示例使用 AppendFormat 方法将一个设置为货币值格式的整数值放置到 StringBuilder 的结尾。

int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is "); MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);

  此示例将 Your total is $25.00 显示到控制台。

Insert

  Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder 的第六个位置。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful "); Console.WriteLine(MyStringBuilder);

  此示例将 Hello Beautiful World! 显示到控制台。

Remove

  可以使用 Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用 Remove 方法缩短 StringBuilder

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7); Console.WriteLine(MyStringBuilder);

  此示例将 Hello 显示到控制台。

Replace

  使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。以下示例使用 Replace 方法来搜索 StringBuilder 对象,查找所有的感叹号字符 (!),并用问号字符 (?) 来替换它们。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace(!, ?); Console.WriteLine(MyStringBuilder);

posted @ 2017-09-27 16:51  贫道俺来也  阅读(193)  评论(0编辑  收藏  举报