# 字符串 ## 字符串及常用方法 在任何一个软件中对字符串的操作都是必不可少的,掌握好字符串的操作将会在编程中起到事半功倍的作用。 在 C# 语言中提供了对字符串类型数据操作的方法,例如截取字符串中的内容、查找字符串中的内容等。 常用的字符串操作包括获取字符串的长度、查找某个字符在字符串中的位置、替换字符串中的内容、拆分字符串等。 在字符串操作中常用的属性或方法如下表所示。 | 编号 | 属性或方法名 | 作用 | | ---- | ------------ | ----------------------------------------------------------------------------------------------------------------------------- | | 1 | Length | 获取字符串的长度,即字符串中字符的个数 | | 2 | IndexOf | 返回整数,得到指定的字符串在原字符串中第一次出现的位置 | | 3 | LastlndexOf | 返回整数,得到指定的字符串在原字符串中最后一次出现的位置 | | 4 | StartsWith | 返回布尔型的值,判断某个字符串是否以指定的字符串开头 | | 5 | EndsWith | 返回布尔型的值,判断某个字符串是否以指定的字符串结尾 | | 6 | ToLower | 返回一个新的字符串,将字符串中的大写字母转换成小写字母 | | 7 | ToUpper | 返回一个新的字符串,将字符串中的小写字母转换成大写字母 | | 8 | Trim | 返回一个新的字符串,不带任何参数时表示将原字符串中前后的空格删除。 参数为字符数组时表示将原字符串中含有的字符数组中的字符删除 | | 9 | Remove | 返回一个新的字符串,将字符串中指定位置的字符串移除 | | 10 | TrimStart | 返回一个新的字符串,将字符串中左侧的空格删除 | | 11 | TrimEnd | 返回一个新的字符串,将字符串中右侧的空格删除 | | 12 | PadLeft | 返回一个新的字符串,从字符串的左侧填充空格达到指定的字符串长度 | | 13 | PadRight | 返回一个新的字符串,从字符串的右侧填充空格达到指定的字符串长度 | | 14 | Split | 返回一个字符串类型的数组,根据指定的字符数组或者字符串数组中的字符 或字符串作为条件拆分字符串 | | 15 | Replace | 返回一个新的字符串,用于将指定字符串替换给原字符串中指定的字符串 | | 16 | Substring | 返回一个新的字符串,用于截取指定的字符串 | | 17 | Insert | 返回一个新的字符串,将一个字符串插入到另一个字符串中指定索引的位置 | | 18 | Concat | 返回一个新的字符串,将多个字符串合并成一个字符串 | ## Split:将字符串拆分为数组 C# Split 方法用于按照指定的字符串来拆分原有字符串,并返回拆分后得到的字符串数组。 ## 获取字符串长度(string.Length) 字符串实际上是由多个字符组成的,字符串中的第一个字符使用字符串[0]即可得。[0]中的 0 称为下标。 获取字符串中的第一个字符使用的下标是 0,则字符串中最后一个字符的下标是字符串的长度减 1。 使用 C# 语言如果要获取字符串的长度,使用 Length 属性即可,获取的方法如下。 ```C# 字符串.Length ``` ## IndexOf 和 LastIndexOf:查找字符串中的字符 在字符串中查找是否含有某个字符串是常见的一个应用,例如在输入的字符串中查找特殊字符、获取某个字符串在原字符串中的位置等。 在 C# 中字符串的查找方法有 IndexOf、LastlndexOf,IndexOf 方法得到的是指定字符串在原字符串中第一次出现的位置,LastlndexOf 方法得到的是指定字符串在查找的字符串中最后一次出现的位置。 需要注意的是字符串中的每个字符的位置是从 0 开始的。 无论是哪个方法,只要指定的字符串在查找的字符串中不存在,结果都为 -1。 如果要判断字符串中是否仅含有一个指定的字符串,则需要将 IndexOf 和 LastlndexOf 方法一起使用,只要通过这两个方法得到的字符串出现的位置是同一个即可。 ## Substring:字符串截取函数 在一个字符串中截取一部分字符串也是经常用到的,例如从身份证号码中取得岀生年月日、截取手机号码的前 3 位、截取给定邮箱的用户名等。 在 C# 语言中截取字符串的方法是 Substring 方法,在使用该方法时有以下两种方法传递参数。 ```C# Substring(指定位置); //从字符串中的指定位置开始截取到字符串结束 Substring(指定位置, 截取的字符的个数); //从字符串中的指定位置开始截取指定字符个数的字符 ``` ## Insert:字符串插入 在一个字符串中可以在指定位置插入另一个字符串,在 C# 中插入字符串使用的方法是 Insert 方法。 在 Insert 方法中需要两个参数,一个是字符串插入的位置,一个是字符串。 ## 数据类型转换 C# 是一门强类型语言,对类型要求比较严格,但是在一定的条件下也是可以相互转换的,如将 int 型数据转换成 double 型数据。 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 类型的值。 示例代码如下。 ```C# 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 的转换可能会导致精度下降,但决不会引起数量上的丢失。其它的隐式数值转换则不会有任何信息丢失。 ## 强制数据类型转换 强制类型转换主要用于将存储范围大的数据类型转换成存储范围小的,但数据类型需要兼容。 例如 int 型转换成 float 型是可行的,但 float 型转换成 int 型则会造成数据精度丢失,而且字符串类型与整数类型之间是无法进行强制类型转换的。 强制类型转换的语法如下。 ```C# 数据类型变量名 = (数据类型) 变量名或值; ``` ## Parse 方法:字符串类型转换 C# Parse 方法用于将字符串类型转换成任意类型,具体的语法形式如下。 ```C# 数据类型 变量二数据类型.Parse(字符串类型的值); ``` 这里要求等号左、右两边的数据类型兼容。 ## Convert 方法:数据类型转换 Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。 具体的语法形式如下。 ```C# 数据类型 变量名 = 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 方法代替,但是依然会损失存储范围大的数据类型的精度。 ## 装箱和拆箱(值类型和引用类型) 在 C# 语言中数据类型分为值类型和引用类型,将值类型转换为引用类型的操作称为装箱,相应地将引用类型转换成值类型称为拆箱。 在上面的转换中 int 类型是值类型,而 string 类型是引用类型,当将值类型变量 a 的值转换成引用类型变量 str 时就是一个装箱的操作, 而拆箱操作则是将引用类型变量 str 的值再转换成整型的过程,转换的代码如下。 ```C# a=int.Parse(str); ``` 这样就完成了一个简单的装箱和拆箱操作。