C# 第五篇 字符串
一、什么是字符串
字符串,顾名思义,就是用字符拼接成的文本值。字符串在存储上与数组类似,不仅字符串的长度可取,而且每一位上的元素也可取。
二、字符串的声明与初始化
字符串必须包含在一对双引号(“”)之内。
"23.23","ABCDEF","你好"
声明字符串,其中 string 是指字符串类型 str 字符串变量名 NULL 表明字符串的值等于null。
string str = [null]
使用字符数组初始化字符串
char[] carray = {'t','i','m','e'}; string str = new string(carray); string str2 = new string(carray,1,2);
三、获取字符串信息
3.1 获取字符串长度
使用string类的Length属性,其语法格式:public int Length {get;}
string num = "12345 67890"; int size = num.Length;
3.2 获取指定位置的字符
使用string类的Chars属性,其语法格式: public char this[int index]{get;},字符串索引位置从0开始。
string str = "努力工作是人生最好的投资"; char chr = str[5]
3.3 获取子字符串索引位置
string类提供了两种查找字符串索引位置的方法,IndexOf方法(首次出现的索引位置)与LastIndexOf方法(最后一次出现的索引位置)。
string str = "We are the world"; int size = str.IndexOf('e'); //第一次出现的位置 int size2 = str.IndexOf('e',size+1); //第二次出现的位置,不存在则返回-1 int size3 = str LastIndexOf('e'); //最后出现的位置
3.4 判断字符串首尾内容
string类提供了两种查找字符串首尾内容的方法,StartsWith方法(判定是否以指定内容开头)与EndsWith方法(判定是否以指定内容结尾)。
public bool StratsWith(string value)
public bool StratsWith(string value,bool ignoreCase,CultureInfo culture)
value 要比较的字符串;ignoreCase 是否忽略大小写;CultureInfo 用来确定如何对字符串与value进行比较的区域信息;
string str = "梦想还是要有的,万一实现了呢!"; bool result = str.StartWith("梦想"); bool result = str.EndsWith("。"); string str = "Keep on going never give up"; bool result = str.StartWith("keep",true,null);
四、字符串的相关操作
4.1 字符串的拼接
使用"+"运算符可完成对多个字符串的拼接
string str1 = "hello"; string str2 = "world"; string str = str1 + " " + str2;
4.2 比较字符串
对字符串的值进行比较,可使用关系运算符"=="。
string str1 = "hello"; string str2 = "hello"; Console.WriteLine((str1 = str2));
还可以使用Equals方法,语法格式如下:
public bool Equals(string value) public static bool Equals(string a,stringb)
使用方法:
string str = "hello"; if(str.Equals("hello")) { Console,WriteLine("字符串一致!!!"); }
或者
if(bool Equals("hello","hello")) { Console,WriteLine("字符串一致!!!"); }
4.3 字符串的大小写转换
使用string类提供的ToUpper方法(转换大写)和ToLower方法(转换小写)转换字符串大小写。
string str = "hello world"; Console,WriteLine(str.ToUpper()); //转换大写 Console,WriteLine(str.ToLower()); //转换小写
4.4 格式化字符串
使用string类的Format方法用于将字符串数据格式化指定格式,语法格式如下:
public static string Format(string format,object arg0) public static string Format(string format,params object[] args)
4.4.1 数值类型数据的格式化
数值类型有多种显示方式,如货币形式、百分比形式等。
格式说明符 | 名称 | 说明 | 示例 |
C或c | 货币 | 结果:货币值 支持类型:所有数值类型 | ¥123或-¥123.456 |
D或d | Decimal | 结果:整数数字,负号可选 支持类型:仅整型 | 1234或-001234 |
E或e | 指数(科学型) | 结果:指数记数法 支持类型:所有数值类型 | 1.052033E+003或 -1.05e+003 |
F或f | 定点 | 结果:整数和小数、负号可选 支持类型:所有数值类型 | 1234.57或-1234.5600 |
N或n | Number | 结果:整数和小数、组分隔符和小数分隔符,负号可选 支持类型:所有数值类型 | 1,234.57或-1,234.560 |
P或p | 百分比 | 结果:乘以100并显示百分比符号的数字 支持类型:所有数值类型 | 100.00%或100% |
"X"或“x” | 十六进制 | 结果:十六进制字符串 支持类型:仅整型 | FF或00ff |
范例:
Console.WriteLine(string.Format("1251+3950的结果是:{0:C}",1251+3950)); //货币形式显示 Console.WriteLine(string.Format("120000.1用科学计数法表示:{0:E}",120000.1)); //科学计数法表示 Console.WriteLine(string.Format("12800以分隔符数字显示:{0:N0}",12800)); //分隔符数字显示
4.4.2 日期时间类型数据的格式化
按格式化输出日期类型数据,格式规范如下:
格式说明符 | 说明 | 举例 |
d | 短日期格式 | YYYY-MM-dd |
D | 长日期格式 | YYYY年MM月dd日 |
f | 完整日期/时间格式(短时间) | YYYY年MM月dd日 hh:mm |
F | 完整日期/时间格式(长时间) | YYYY年MM月dd日 hh:mm:ss |
g | 常规日期/时间格式(短时间) | YYYY-MM-dd hh:mm |
G | 常规日期/时间格式(长时间) | YYYY-MM-dd hh:mm:ss |
M或m | 月/日 格式 | MM月dd日 |
t | 短时间格式 | hh:mm |
T | 长时间格式 | hh:mm:ss |
Y或y | 年/月 格式 | YYYY年MM月 |
范例:
DateTime sdatetime = DateTime.Now; //获取当前日期时间 string.Format("输出格式{0:d}",sdatetime); string.Format("输出格式{0:D}",sdatetime); string.Format("输出格式{0:F}",sdatetime); string.Format("输出格式{0:G}",sdatetime);
通过ToString方法传入指定的格式说明符也可实现对数值类型数据和时间类型数据格式化,例如:money.ToString("C"); sdatetime.ToString("D");
4.5 截取字符串
string类提供了一种SubString方法,可以截取字符串指定位置和指定长度的子字符串,语法格式如下:
public string SubString(int startIndex) public string SubString(int startIndex,int length)
示例:
string str = "hello world"; string str1 = str.SubString(0,str.IndexOf('W'));
4.6 分割字符串
string类提供了一种Split方法,用于根据指定的字符数值或字符串数组对字符串进行分割,语法格式如下:
public string[] Split(params char[] separator) public string[] Split(char[] separator,int count) public string[] Split(string[] separtor,stringSplitOptions options) public string[] Split(char[] separator,int count,stringSplitOptions options) public string[] Split(string[] separtor,int count,stringSplitOptions options)
separator 指定的字符数组或字符串数组; count 要返回的子字符串的最大数量;options 若要省略返回的数组中的空数组元素,则为RemoveEmptyEntries ,若要包含,则为NONE;
示例:
string str = "hello ,world!!!, hello ,world!,!!"; char[] separator ={','}; string[] splitStrings = str.Split(separator,StringSplitOptions.RemoveEmptyEntries); Console.WriteLine(splitStrings[0]);
4.7 去除空白内容
String类提供了一种Trim方法,用来移除字符串中的所开头与结尾空白字符,语法格式如下:
piblic string Trim() piblic string Trim(params CHAR[] trimChars)
示例:
string str = " hello world !! "; string str1 = str.Trim(); char[] charstotrim = {'*'}; string str = "*****hello***world***"; string str1 = str.Trim(charstotrim);
4.8 替换字符串
string类提供了一种Replace方法,用于将字符串中的某个字符或字符串替换成其他的字符或字符串,语法格式如下:
public string Replace(char OChar,char Nchar) public string Replace(string OValue,string NValue)
OChar 待替换的字符;Nchar 替换后的新字符;OValue 待替换的字符串;NValue 替换后的新字符串;
示例:
string str = "hello,world,!"; string str1 = str.Replace(',',' '); string str2 = str1.Replace("hello","Hello");
五、可变字符串类
StringBuilder类位于System.Text命名空间中,StringBuilder是一个可变的字符序列。
1、StringBuilder类的定义
public StringBuilder() public StringBuilder(int capacity) public StringBuilder(string value) public StringBuilder(int capacity,int maxCapacity) public StringBuilder(string value,int capacity) public StringBuilder(string value,int startIndex,int length,int capacity)
capacity 起始大小; value 初始化子字符串; maxcapacity 设定最大字符数; length 子字符串的字符数; startIndex 子字符串开始的位置;
StringBuilder类类的常用方法
方法 | 说明 |
Append | 将文本或字符串追加到指定对象的末尾 |
AppendFormat | 自定义变量的格式并将这些值追加到StringBuilder对象的末尾 |
Insert | 将字符串或对象添加到当前StringBuilder对象中的指定位置 |
Remove | 从当前StringBuilder对象中移除指定数量的字符 |
Replace | 用一个指定的字符来替换StringBuilder对象内的字符 |
示例:
int num = 368; string SBuilder = new StringBuilder("hello"); SBuilder.Append(" world"); SBuilder.AppendFormat("{0:C0}",num); SBuilder.Insert(0,"01、"); SBuilder.Remove(0,SBuilder.Length-3); SBuilder.Replace("hello","Hello")
拓展:
1、去除首尾字符串
///<summary> /// 截前后字符(串) ///</summary> ///<param name="val">原字符串</param> ///<param name="str">要截掉的字符串</param> ///<param name="all">是否</param> ///<returns></returns> private string GetString(string val,string str,bool all) { return Regex.Replace(val, @"(^(" + str + ")" + (all ? "*" : "") + "|(" + str + ")"+(all ? "*" : "") + "$)", ""); }
2、去除首尾字符
/// <summary> /// /// </summary> /// <param name="val">原字符串</param> /// <param name="c">要截取的字符</param> /// <returns></returns> private string GetString(string val,char c) { return val.TrimStart(c).TrimEnd(c); }