本章主要介绍在C#中如何进行字符串的相关操作。C#中进行字符串操作主要使用两种类型,分别是静态字符串String和动态字符串StringBuilder。本章将学习这两种类型的字符串并介绍字符串编码和使用正则表达式的相关知识。
本章主要内容
& 静态字符串String的使用方法
& 动态字符串StringBuilder的使用方法
& String与StringBuilder的区别
& 判断两种代码效率的简单方法
& 正则表达式的相关语法
& 正则表达式的相关类
& 使用正则表达式验证电子邮箱地址
几乎所有的编程语言里都提供了对字符串操作的支持,C#也不例外。静态字符串是进行字符串操作中常用的类型。字符串的简单介绍在前文的实例中已经涉及,本节主要介绍静态字符串的相关使用方法。
字符串的比较是一个常见的操作。管理信息系统中常见的登录界面中,就需要对用户输入的用户名和密码与系统中存储的用户名和密码进行比较,如二者相同,则允许登录;反之,则无法登录。
C#中进行字符串比较的方法是使用String.Compare方法。String.Compare方法有很多,下面仅列出4类比较常用的方法:
int Compare(string strA, string strB)
int Compare(string strA, string strB, bool ignoreCase)
int Compare(string strA, int indexA, string strB, int indexB, int length)
int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase)
上述的4种方法中strA和strB表示进行比较的两个字符串,ignoreCase表示是否忽略大小写。后两个方法中的indexA、indexB表示字符串的起始位置。length表示字符串的长度,即可以对两个字符串中的某一段进行比较操作。
下面介绍一个简单的实例,说明字符串比较操作。
创建一个Windows控制台应用程序,对自定义的两个字符串进行比较。
(1)创建一个名为StrComp的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
//分别定义两个字符串"Thank You!"和"THANK YOU!"
string a = "Thank You!";
string b = "THANK YOU!";
//忽略大小写比较两个字符串
int i = String.Compare(a, b, true);
//不忽略大小写比较两个字符串
int j = String.Compare(a, b);
//输出比较结果
Console.WriteLine("忽略大小写比较 {0}.", i);
Console.WriteLine("不忽略大小写比较 {0}.", j);
}
按Ctrl+F5组合键运行程序,运行结果如图3-1所示。
图3-1 运行结果
忽略大小写时,C#认为两个字符串相等,返回值为0。未忽略大小写比较时,C#认为“Thank You!”小于“THANK YOU!”,返回值为-1。当返回字符串a大于字符串b时,将会返回1。
C#中提供了搜索字符串中的字符和子字符串的功能,主要有以下6种:
int IndexOf(char value)
int IndexOf(char value, int startIndex)
int IndexOf(char value, int startIndex, int count)
int IndexOf(string value)
int IndexOf(string value, int startIndex)
int IndexOf(string value, int startIndex, int count)
上述6种格式中前3种以字符为搜索目标,后3种以字符串为搜索目标。value表示要搜索的字符或字符串,startIndex表示起始位置,count表示从起始位置开始的字符个数。返回值为搜索的字符或字符串在原字符串中的位置。
创建一个Windows控制台应用程序,搜索字符串中的字符。
(1)创建一个名为StrSearch的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
//分别定义字符串a和字符b,并分别为其赋初值为"How are you!"和‘o’
string a = "How are you!";
char b = 'o';
//搜索字符‘o’在字符串"How are you!"中第一次出现的位置
int position1 = a.IndexOf(b);
Console.WriteLine("字符‘o’在字符串How are you!中第一次出现的位置{0}", position1);
//搜索字符‘o’在字符串"How are you!"中最后一次出现的位置
int position2 = a.LastIndexOf(b);
Console.WriteLine("字符‘o’在字符串How are you!中最后一次出现的位置{0}", position2);
}
按Ctrl+F5组合键运行程序,运行结果如图3-2所示。
图3-2 运行结果
代码中分别使用了IndexOf方法和LastIndexOf方法,分别搜索到“o”在字符串“How are you!”中的第一次出现和最后一次出现的位置。由于字符串的位置是从零开始排序,因此“o”两次出现的位置分别为1和9。
通过对字符串进行格式化,可以控制字符串的输出格式。下面的实例介绍了进行格式化字符串输出的方法。
创建一个Windows控制台应用程序,对字符串进行格式化输出。
(1)创建一个名为StrSearch的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
//声明一个表示当前时间的变量
DateTime a = System.DateTime.Now;
//分别输出未格式化和格式化的变量a
Console.WriteLine(a);
Console.WriteLine("{0:yyyy-MM-dd}",a);
}
按Ctrl+F5组合键运行程序,运行结果如图3-3所示。
图3-3 运行结果
未进行格式化时,输出的是完整的日期格式,包括日期和时间。通过“yyyy-MM-dd”进行格式化后,按照规定的格式输出了日期。
C#中通常使用两个方法对字符串进行连接,分别为Concat方法和Join方法。这两种方法接受的参数略有差别,功能类似,其语法格式如下:
public static string Concat(params string[]values)
public static string Join(string separator, string[]value)
其中,values和value表示字符串数组,separator表示分隔符。返回值为一个完整的字符串。下面通过实例说明Concat方法和Join方法的使用。
创建一个Windows控制台应用程序,演示Concat和Join的使用方法。
(1)创建一个名为StrConnect的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank";
string b = "you";
string[] c = { a, b };
string d = String.Concat(a, b);
Console.WriteLine(d);
string e = String.Join("-",c);
Console.WriteLine(e);
}
按Ctrl+F5组合键运行程序,运行结果如图3-4所示。
图3-4 运行结果
Concat方法接受的是多个字符串作为参数,而Join接受的第一部分参数是分隔符,第二部分参数是连接的字符串数组。需要注意的是前文中介绍的“+”操作符,该操纵符也可以用字符串的连接。
与上一小节的方法相反,本小节介绍的Split方法是根据分隔字符将字符串拆分。其最常用的一种格式如下:
public string[] Split( params char[] separator)
其中,separator为分隔符,返回的是分隔完毕的字符串数组。下面通过一个实例进行说明。
创建一个Windows控制台应用程序,演示Split的使用方法。
(1)创建一个名为StrSplit的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank-you";
string[] b = a.Split('-');
for (int i = 0; i < b.Length; i++)
{
Console.WriteLine(b[i]);
}
}
按Ctrl+F5组合键运行程序,运行结果如图3-5所示。
图3-5 运行结果
通过使用Split方法将字符串以“-”为界拆分,代码最后输出字符串时使用了数组的知识,后面章节中会涉及,此处不再赘述。
C#中可以使用Insert方法方便地向字符串中的任意位置插入字符。该方法中最常用的一种格式如下:
public string Insert(int startIndex, string value)
其中,startIndex表示起始位置,value表示要插入的字符串,返回值为完整的字符串。下面通过一个实例说明其用法。
创建一个Windows控制台应用程序,演示Insert的使用方法。
(1)创建一个名为StrInsert的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank Wang";
string b = a.Insert(6, "you! ");
Console.WriteLine(b);
}
按Ctrl+F5组合键运行程序,运行结果如图3-6所示。
图3-6 运行结果
Insert方法的第一个参数是插入字符串的位置,第二个参数是要插入的字符串。
对于字符串中不需要的部分字符,可以使用Remove方法将其删除。其最常用的一种格式如下:
public string Remove( int startIndex, int count)
其中,startIndex表示的是起始位置,count表示要删除字符的个数,返回值为删除后的字符串。下面通过一个实例说明其用法。
创建一个Windows控制台应用程序,演示Remove的使用方法。
(1)创建一个名为StrDelete的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank you!";
string b = a.Remove(5);
Console.WriteLine(b);
}
按Ctrl+F5组合键运行程序,运行结果如图3-7所示。
此处使用的Remove方法中参数是删除字符串的起始位置,将一直删除到字符串的末尾,也可以在Remove方法中指定字符串的起始和终结位置。
图3-7 运行结果
C#中提供了Copy方法用于字符串的复制操作,其中最常用的一种语法格式如下:
public static string Copy(string str)
其中,str表示源字符串,返回值为与源字符串内容相同的字符串。下面通过一个实例演示Copy方法的使用方法。
创建一个Windows控制台应用程序,演示Copy的使用方法。
(1)创建一个名为StrCopy的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank you";
string b = String.Copy(a);
Console.WriteLine(b);
}
按Ctrl+F5组合键运行程序,运行结果如图3-8所示。
图3-8 运行结果
使用了Copy方法后,字符串b的内容和字符串a的内容已经完全相同。
C#中提供了Replace方法,可以方便地将字符串中的某些字符或子字符串替换为其他的字符或字符串。其最常用的两种格式如下:
public string Replace(char oldChar, char newChar)
public string Replace(string oldValue, string newValue)
其中,oldChar和oldValue表示需要替换的字符或字符串,newChar和newValue表示要替换为的新值,返回值为替换后的结果。下面通过实例说明替换字符串的方法。
创建一个Windows控制台应用程序,演示Replace的使用方法。
(1)创建一个名为StrReplace的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank you";
string b = a.Replace("you","wang");
Console.WriteLine(b);
}
按Ctrl+F5组合键运行程序,运行结果如图3-9所示。
图3-9 运行结果
Replace方法将搜索字符串a中的“you”,并将其替换为“wang”。
在英文字符的大小写之间进行转换是一种常见的操作,C#中提供了ToUpper和ToLower用于进行大小写的转换。下面通过一个实例演示大小写转换的使用方法。
创建一个Windows控制台应用程序,演示ToUpper和ToLower的使用方法。
(1)创建一个名为StrCopy的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
string a = "Thank You";
string b = a.ToLower();
string c = a.ToUpper();
Console.WriteLine(b);
Console.WriteLine(c);
}
按Ctrl+F5组合键运行程序,运行结果如图3-10所示。
图3-10 运行结果
ToLower方法将字符串a全部转换为小写,而ToUpper方法将字符串a全部转换为大写。