String和StringBulider区别:(分配空间和线程的使用上来讲,StringBuilder肯定比String要高,但是前提是使用频率比较高的情况下)
String 对象是不可变的。每次使用system.string类中的一个方法时,都要在内容中创建一个新的字符串对象,需要重新为新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的string对象相关的系统开销可能会变的很大。如果要修改字符串而不创建新的对象,使用StringBuilder类,循环中将许多字符串连接在一起的时,使用StringBuilder类会提高性能。
大多数的情况从性能比较:StringBuilder>String。
1、String用法
(1)String.IndexOf — String.IndexOf(value, startIndex, count)
String.IndexOf 方法 (Char, Int32, Int32):报告指定字符在此实例中的第一个匹配项的索引。搜索从指定字符位置开始,并检查指定数量的字符位置。
参数: value:要查找的 Unicode 字符。startIndex:搜索起始位置。count:要检查的字符位置数。
返回值(Int32):
如果找到该字符,则为 value 的索引位置;否则如果未找到,则为 -1。
示例:
string str = "梧州市嗨嗨实业有限公司国际通苟海海*梧州市嗨嗨实业有限公司国际通苟海海";
string sub = str.IndexOf("中国").ToString();//返回 -1
string sub = str.IndexOf("嗨嗨").ToString();//返回 3
string sub = str.IndexOf("嗨嗨",10).ToString();//返回21 说明:这是从第10个字符开始查起。
string sub = str.IndexOf("苟",15,10).ToString();//返回 -1
string sub = str.IndexOf("苟",15,20).ToString();//返回 -32 说明:从第15个字符开始查找,要查找的范围是从第15个字符开始后20个字符,即从第15-35个字符中查找。
**************************************************************************************************************
(2) String.LastIndexOf 方法
报告指定的 Unicode 字符或 String 在此实例中的最后一个匹配项的索引位置。
名称 |
说明 |
String.LastIndexOf (Char) |
报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。 |
String.LastIndexOf (String) |
报告指定的 String 在此实例内的最后一个匹配项的索引位置。 |
String.LastIndexOf (Char, Int32) |
报告指定 Unicode 字符在此实例中的最后一个匹配项的索引位置。该搜索从指定字符位置开始。 |
String.LastIndexOf (String, Int32) |
报告指定的 String 在此实例内的最后一个匹配项的索引位置。该搜索从指定字符位置开始。 |
String.LastIndexOf (String, StringComparison) |
报告指定字符串在当前 String 对象中最后一个匹配项的索引。一个参数指定要用于指定字符串的搜索类型。 |
String.LastIndexOf (Char, Int32, Int32) |
报告指定的 Unicode 字符在此实例内的子字符串中的最后一个匹配项的索引位置。搜索从指定字符位置开始,并检查指定数量的字符位置。 |
String.LastIndexOf (String, Int32, Int32) |
报告指定的 String 在此实例内的最后一个匹配项的索引位置。搜索从指定字符位置开始,并检查指定数量的字符位置。 |
String.LastIndexOf (String, Int32, StringComparison) |
报告指定字符串在当前 String 对象中最后一个匹配项的索引。参数指定当前字符串中的起始搜索位置,以及要用于指定字符串的搜索类型。 |
String.LastIndexOf (String, Int32, Int32, StringComparison) |
报告指定的 String 对象在此实例内的最后一个匹配项的索引位置。参数指定当前字符串中的起始搜索位置、要搜索的当前字符串中的字符数量,以及要用于指定字符串的搜索类型。 |
示例:
string str = "梧州市嗨嗨实业有限公司国际通苟海海*梧州市嗨嗨实业有限公司国际通苟海海";
string sub = str.LastIndexOf("苟文").ToString();//返回-1
string sub = str.LastIndexOf("苟").ToString();//返回32
string sub = str.LastIndexOf("苟",8).ToString();//返回-1
string sub = str.LastIndexOf("苟",20).ToString();//返回14
string sub = str.LastIndexOf("苟",33).ToString();//返回32
说明:在指定的范围内查找字符,这个范围是上面的输入的参数,理解为,从索引0开始到指定的数值位置范围内查找最后一个匹配的的字符串的位置。示例中,0-8中没有“苟”字,所以返回-1,0-20范围中,有一个“苟”字在索引14位置上,0-33范围中有两个“苟”字,因为LastIndexOf是返回最后一个匹配项索引位置,所以返32,而不是14。
(3) String.Substring:截取字符
String.Substring (Int32) |
从此实例检索子字符串。子字符串从指定的字符位置开始。 |
String.Substring (Int32, Int32) |
从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。 |
示例:
string str = "梧州市嗨嗨实业有限公司国际通苟海海*梧州市嗨嗨实业有限公司国际通苟海海";
string sub = str.Substring(11);//返回 “国际通苟海海*深圳市嗨嗨实业有限公司国际通苟海海”
string sub = str.Substring(11,7);//返回 “国际通苟海海*”
总结一下:
IndexOf、LastIndexOf都是返回一个位置,是个整数值;找不到都返回-1;
IndexOf是从左向右查,LastIndexOf是从右向左查,不管是IndexOf还是LastIndexOf,索引序列都是从左到右的(起始值是0)
Substring是字符串截取,返回值是一个截取后的字符串。
**************************************************************************************************************
(4)ToUpper(转换为大写)和ToLower(转换为小写)
string s="RaSer"; string s1=s.ToUpper(); //s1="RASER";
(5)ToCharArray将字符串转化为字符数组(
string str="雨已经小了";
char[] s=str.ToCharArray();//s=char[]{'雨',"已","经","小","了"};
(6)Trim() 出去两边的空格
string str=" dd "; string s=str.Trim();//s="dd";
(7)Split 将字符串
string str="我,你的、她的;呀";
string[] s=str.Split(new char(){',','、',';'});//s=string[]{"我","你的","她的","呀"};
(8)Remove删除字符串(字符):在字符串中移除从startIndex开始,长度为length的字符串,剩下的字符合为一个新的字符串
string str="天已经凉了"; string s=str.Remove(1,2);//s="天凉了";
(9)Insert 插入:在字符串的index位置上插入字符,原来的字符依次后移,变成一个新的字符串
string str="天凉了"; string s=str.Insert(1,"已经");// s="天已经凉了"
(10)Replace 字符串(字符也是可以的)替换,返回新的字符串
string str="好咸呀"; string s=str.Replace("咸","清淡");//s="好清淡呀";
(11)Equals 比较两个字符串是否相等
string str1="asd";
string str2="ert";
bool b = str1.Equals(str2); //b=false;
(12)Contains 判断字符串中是否包含某个字符,返回bool值。
string str="好咸呀";
bool b=str.Contains("咸"); //b=true;
(13)EndsWith和StartsWith 判断是否是已某种字符串开始或者结束
string str="好大的山啊";
bool b1=str.StartsWith("大"); //b1=false;
bool b2-str.EndsWith("啊"); //b2=true;
(14)Join字符串的合并
string.Join(string str,string[] strArr);//将数组strArr中的内容拼接成一个新的字符串,并在对应数组的每两项间添加分隔符str
string strs=string.Join(",",string[]{"A","e","r","F"});//strs="A,e,r,F";
(15)IsNullOrEmpty判断字符是否为null或者为空,返回值为bool;
string str1="hahha";
bool b1=string.IsNullOrEmpty(str);//b1=false;
string str2="";
bool b2=string.IsNullOrEmpty(str2);//b2=true;
string str3=null;
bool b3=string.IsNullOrEmpty(str3);//b3=true;
(16)Format参数化处理,相当于Console.WriteLine();
string str=String.Format("明天{0}很冷","天气");//str="明天天气很冷";
(17)Compare 字符串的比较(按照字典顺序) / string.Compare(string str1,string str2,bool ignoreCase) //忽略大小写比较
int result= string.Compare(string str1,string str2);
当str1 > str2时,返回1
当str1 = str2时,返回0
当str1 < str2时,返回-1
(18)Concat连接方法参数很多,常用的Concat(string str1,string str2);
string str=string.Concat("w","e"); //str="we";
(19)PadLeft、PadRight 为了让格式统一,当位数不足时,给予补足
"1".PadLeft(6); //输出 1,字符串为右对齐,用空格填充
"1".PadLeft(6, '0'); //输出 000001,字符串为右对齐,长度不足用0填充
"1".PadRight(6); //输出1 ,字符串为左对齐,用空格填充
"1".PadRight(6, '0'); //输出 100000,字符串为左对齐,长度不足用0填充
**************************************************************************************************************
2、StringBulider 的用法:
当需要操作很长的字符串,或者要对字符串进行非常频繁的操作时,应该使用StringBuilder,其余场合,用String比较方便
“StringBuilder类内部保留了一个私有的String 类型成员,当ToString()这个方法被调用时,这个String 类型成员将会被赋值并且返回给调用者。
(1)Append :追加
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
(2)AppendFormat:带格式追加
int MyInt = 60;
StringBuilder MyStringBuilder = new StringBuilder("hes total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);
//此示例将 hes total is $60.00 显示到控制台。
(3)Insert:插入
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
此示例将 Hello Beautiful World! 显示到控制台。
(4)Remove:删除
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
(5)Replace:覆盖
StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
此示例将 Hello World? 显示到控制台
**************************************************************************************************************