在 C# 语言中提供了对字符串类型数据操作的方法,例如截取字符串中的内容、查找字符串中的内容等。
在任何一个软件中对字符串的操作都是必不可少的,掌握好字符串的操作将会在编程中起到事半功倍的作用。
下面将分别来介绍常见的字符串操作、数据类型的转换,以及字符串操作在实际工作中的应用。
C#字符串
常用的字符串操作包括获取字符串的长度、查找某个字符在字符串中的位置、替换字符串中的内容、拆分字符串等。
在字符串操作中常用的属性或方法如下表所示。
C#获取字符串长度
字符串实际上是由多个字符组成的,字符串中的第一个字符使用字符串[0]即可得。[0]中的 0 称为下标。
获取字符串中的第一个字符使用的下标是 0,则字符串中最后一个字符的下标是字符串的长度减 1。
使用 C# 语言如果要获取字符串的长度,使用Length属性即可,如:字符串.Length
【实例 1】在 Main 方法中从控制台输入一个字符串,输出该字符串的长度,以及字符串中的第一个字符和最后一个字符。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
Console.WriteLine("字符串的长度为:" + str.Length);
Console.WriteLine("字符串中第一个字符为:" + str[0]);
Console.WriteLine("字符串中最后一个字符为:" + str[str.Length - 1]);
}
}
【实例 2】在 Main 方法中从控制台输入一个字符串,并将字符串中的字符逆序输出。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
for(int i = str.Length - 1; i >= 0; i--)
{
Console.WriteLine(str[i]);
}
}
}
C# 查找字符串
在 C# 中字符串的查找方法有 IndexOf、LastlndexOf,IndexOf 方法得到的是指定字符串在原字符串中第一次出现的位置,LastlndexOf 方法得到的是指定字符串在查找的字符串中最后一次出现的位置。
需要注意的是字符串中的每个字符的位置是从 0 开始的。无论是哪个方法,只要指定的字符串在查找的字符串中不存在,结果都为 -1。
【实例 1】在 Main 方法中从控制台输入一个字符串,然后判断字符串中是否含有 @, 并输出 @ 的位置。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
if (str.IndexOf("@") != -1)
{
Console.WriteLine("字符串中含有@,其出现的位置是{0}", str.IndexOf("@") + 1);
}
else
{
Console.WriteLine("字符串中不含有@");
}
}
}
C# 替换字符串
字符串的替换操作是指将字符串中指定的字符串替换成新字符串。在 C# 中替换字符串的方法是Replace方法。
【实例】在 Main 方法中从控制台输入一个字符串,然后将字符串中所有的‘,’替换成‘_’。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
if (str.IndexOf(",") != -1)
{
str = str.Replace(",", "_");
}
Console.WriteLine("替换后的字符串为:" + str);
}
}
C# 截取字符串
在 C# 语言中截取字符串的方法是 Substring 方法,在使用该方法时有以下两种方法传递参数。
Substring(指定位置); //从字符串中的指定位置开始截取到字符串结束
Substring(指定位置, 截取的字符的个数); //从字符串中的指定位置开始截取指定字符个数的字符
【实例】在 Main 方法中从控制台输入邮箱,要求邮箱中仅含有一个 @,然后截取邮箱中的用户名输出。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
int firstIndex = str.IndexOf("@");
int lastIndex = str.LastIndexOf("@");
if(firstIndex != -1 && firstIndex == lastIndex)
{
str = str.Substring(0, firstIndex);
}
Console.WriteLine("邮箱中的用户名是:" + str);
}
}
C# 插入字符串
在一个字符串中可以在指定位置插入另一个字符串,在 C# 中插入字符串使用的方法是 Insert 方法。
在 Insert 方法中需要两个参数,一个是字符串插入的位置,一个是字符串。
【实例】在 Main 方法中从控制台输入一个字符串,然后将‘@@@’插入到字符串的第 2 个字符的位置。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
str = str.Insert(1, "@@@");
Console.WriteLine("新字符串为:" + str);
}
}
C#数据类型转换
C# 允许使用两种转换方式:隐式类型转换和显式类型转换。
1) 隐式类型转换
这些转换是 C# 默认的以安全方式进行的转换,不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
2) 显式类型转换
显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
常用的类型转换方法如下表所示。
ToBoolean 如果可能的话,把类型转换为布尔型。
ToByte 把类型转换为字节类型。
ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。
ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。
ToDecimal 把浮点型或整数类型转换为十进制类型。
ToDouble 把类型转换为双精度浮点型。
ToInt16 把类型转换为 16 位整数类型。
ToInt32 把类型转换为 32 位整数类型。
ToInt64 把类型转换为 64 位整数类型。
ToSbyte 把类型转换为有符号字节类型。
ToSingle 把类型转换为小浮点数类型。
ToString 把类型转换为字符串类型。
ToType 把类型转换为指定类型。
ToUInt16 把类型转换为 16 位无符号整数类型。
ToUInt32 把类型转换为 32 位无符号整数类型。
ToUInt64 把类型转换为 64 位无符号整数类型。
C#隐式数据类型转换
隐式转换主要是在整型、浮点型之间的转换,将存储范围小的数据类型直接转换成存储范围大的数据类型。
例如将 int 类型的值转换成 double 类型的值,将 int 类型的值转换成 long 类型的值,或者将 float 类型的值转换成 double 类型的值。
int a = 100;
double d = a; //将int类型转换为double类型
float f = 3.14f;
d = f; //将float类型转换为double类型
隐式数值转换包括以下几种:
从 sbyte 类型到 short,int,long,float,double,或 decimal 类型。
从 byte 类型到 short,ushort,int,uint,long,ulong,float,double,或 decimal 类型。
从 short 类型到 int,long,float,double,或 decimal 类型。
从 ushort 类型到 int,uint,long,ulong,float,double,或 decimal 类型。
从 int 类型到 long,float,double,或 decimal 类型。
从 uint 类型到 long,ulong,float,double,或 decimal 类型。
从 long 类型到 float,double,或 decimal 类型。
从 ulong 类型到 float,double,或 decimal 类型。
从 char 类型到 ushort,int,uint,long,ulong,float,double,或 decimal 类型。
从 float 类型到 double 类型。
其中,从 int,uint 或 long 到 float 以及从 long 到 double 的转换可能会导致精度下降,但决不会引起数量上的丢失。其它的隐式数值转换则不会有任何信息丢失。
C#强制数据类型转换
强制类型转换主要用于将存储范围大的数据类型转换成存储范围小的,但数据类型需要兼容。
语法:数据类型变量名 = (数据类型) 变量名或值;
这里要求等号左、右两边的数据类型是一致的。例如将 double 类型转换成 int 类型,代码如下。
double dbl_num = 12345678910.456;
int k = (int) dbl_num ;//此处运用了强制转换
通过上面的语句即可将浮点型转换成整数。这样虽然能将值进行类型的转换,但损失了数据的精度,造成了数据的不准确,因此在使用强制类型转换时还需要注意数据的准确性。
C# Parse方法:字符串类型转换
C# Parse 方法用于将字符串类型转换成任意类型。
语法:数据类型 变量二数据类型.Parse(字符串类型的值);
这里要求等号左、右两边的数据类型兼容。
【实例】在 Main 方法中从控制台输入 3 个数,并将其中的最大数输出。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入三个数字");
int num1 = int.Parse(Console.ReadLine());
int num2 = int.Parse(Console.ReadLine());
int num3 = int.Parse(Console.ReadLine());
int maxvalue = num1;
if (num2 > maxvalue)
{
maxvalue = num2;
}
if (num3 > maxvalue)
{
maxvalue = num3;
}
Console.WriteLine("三个数中最大的值是:" + maxvalue);
}
}
在上面的实例中使用 Parse 方法将字符串类型转换成了整数类型 int,但输入的字符串必须是数字并且不能超出 int 类型的取值范围。
C# Convert方法:数据类型转换
C# Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。
语法:数据类型 变量名 = convert.To数据类型(变量名);
这里 Convert.To 后面的数据类型要与等号左边的数据类型相匹配。
Convert 类常用的类型转换方法如下表所示。
Convert.ToInt16()
转换为整型(short)
Convert.ToInt32()
转换为整型(int)
Convert.ToInt64()
转换为整型(long)
Convert.ToChar()
转换为字符型(char)
Convert.ToString()
转换为字符串型(string)
Convert.ToDateTime()
转换为日期型(datetime)
Convert.ToDouble()
转换为双精度浮点型(double)
Conert.ToSingle()
转换为单精度浮点型(float)
对于整型和浮点型的强制数据类型操作也可以使用 Convert 方法代替,但是依然会损失存储范围大的数据类型的精度。
class Program
{
static void Main(string[] args)
{
float num1 = 82.26f;
int integer;
string str;
integer = Convert.ToInt32(num1);
str = Convert.ToString(num1);
Console.WriteLine("转换为整型数据的值{0}", integer);
Console.WriteLine("转换为字符串{0},",str);
}
}
C#装箱和拆箱(值类型和引用类型)
C# ToString 方法用于将任意的数据类型转换成字符串类型,例如将整数类型转换成字符串类型。
int a=100;
string str=a.ToString();
在 C# 语言中数据类型分为值类型和引用类型,将值类型转换为引用类型的操作称为装箱,相应地将引用类型转换成值类型称为拆箱。
在上面的转换中 int 类型是值类型,而 string 类型是引用类型,当将值类型变量 a 的值转换成引用类型变量 str 时就是一个装箱的操作, 而拆箱操作则是将引用类型变量 str 的值再转换成整型的过程,转换的代码如下。
a=int.Parse(str);
【实例】利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来
int val = 100;
object obj = val;
Console.WriteLine("对象的值 = {0}", obj);
//这是一个装箱的过程,是将值类型转换为引用类型的过程
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine("num: {0}", num);
//这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程
C#正则表达式(Regex类)
正则表达式的主要作用是验证字符串的值是否满足一定的规则,在页面输入数据验证方面的应用比较多。
正则表达式的符号主要分为元字符和表示重复的字符,分别如下表所示。
正则表达式中的元字符
正则表达式中表示重复的字符
此外,在正则表达式中使用|分隔符表示多个正则表达式之间的或者关系,也就是在匹配某一个字符串时满足其中一个正则表达式即可。
例如使用正则表达式来验证身份证信息,第一代身份证是由 15 个数字构成的,第二代身份证是由 18 个数字构成的,正则表达式可以写成 \d{15}|\d{18}。
在 C# 语言中使用正则表达式时要用到 Regex 类,该类在 System.Text.RegularExpressions 名称空间中。
在 Regex 类中使用 IsMatch 方法判断所匹配的字符串是否满足正则表达式的要求。
【实例】在 Main 方法中从控制台输入一个邮箱,使用正则表达式判断其正确性。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个邮箱");
string email = Console.ReadLine();
Regex regex = new Regex(@"^(\w)+(\.\w)*@(\w)+((\.\w+)+)$");
if (regex.IsMatch(email))
{
Console.WriteLine("邮箱格式正确。");
}
else
{
Console.WriteLine("邮箱格式不正确。");
}
}
}
邮箱的正则表达式也有多种写法,上面的写法只是其中的一种,例如将实例中的\w替换成[a-zA-Z0-9_]。
此外,在 Regex 类中还提供了很多方法来操作正则表达式
除了邮箱的正则表达式以外,还有一些常用的正则表达式,如下表所示。