C#字符串操作(string,StringBuilder)
《C#字符串操作---性能优化细节》:https://blog.csdn.net/mss359681091/article/details/54891118
字符串
string是System.String的一个别名。
需要注意的是,string创建的字符串实际上是一个不可变的数据类型。一旦对字符串对象进行了初始化,该字符串就不能再改变内容了。
对于:
string s = "www";
s = s + ".baidu.com";
实际上是创建了一个新的字符串,把就字符串的内容复制到了新的字符串中,然后将新字符串的引用赋值给了该字符串对象。
原先的旧字符串因为没有引用,会被GC回收。
常用方法
CompareTo() :比较两个字符串的内容是否相等。
Replace():用另一个字符或者字符串替换字符串中给定的字符或字符串。
Split():在出现给定字符的地方,把字符串拆分成一个字符串数组 (在后文将单独讲解)。
SubString():在字符串中检索给定位置的子字符串。
ToLower():把字符串转换成小写形式。
ToUpper():把字符串转换成大写形式。
Trim():删除首尾的空白。
Concat():合并字符串。
CopyTo():把字符串中指定的字符复制到一个。
Format():格式化字符串。
IndexOf():获得字符串第一次出现某个给定字符串或者字符的位置。
IndexOfAny():返回定义的数组中任何一个字符最早出现的下标位置。
Insert():把一个字符串实例插入到另一个字符串实例的指定索引处。
Join():合并字符串数组,创建一个新字符串。
StringBuilder
初始化
StringBuilder build = new StringBuilder("Hello"); //初始字符串
StringBuilder build1 = new StringBuilder(20); //初始空的字符串对象,容量为20
StringBuilder build2 = new StringBuilder("Hello", 20);
Append
字符串连接,超过容量时,自动进行扩容。
build.Append(",Harris"); //Hello,Harris
Insert
在指定位置插入字符串。
build.Insert(0, "April say: "); //April say: Hello,Harris
Remove
从当前字符串中删除字符,参数为待删除字符的起始和终止位置。
build.Remove(0, 11); //Hello,Harris
Replace
把一个字符串替换为另一个字符串。
build.Replace("Harris", "April"); //Hello,April
ToString
把当前StringBuilder的字符串提取出来。
Console.WriteLine(build.ToString());
string与StringBuilder区别
string的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存。如果创建一个迭代100000次的循环,每次迭代都将一个字符连接到字符串,这样内存中就会有100000个字符串,每个字符串仅仅与前一个字符串相伴只是有一个字符不同,性能影响是很大的。StringBuilder通过分配一个缓存,就是一个工作区来解决这些问题,在工作区中队字符串应用StringBuilder类的相关方法。包括添加,删除,移除,插入和替换字符等等。执行完之后,将调用ToString方法把工作区中的内容转换为一个字符串,方便赋给一个字符串变量。这样StringBuilder会提升一些性能。
String的split()的两种方法
public String[] split(String regex)
该方法就是给定的表达式和限制参数0来调用两参数split方法。
public String[] split(String regex,int limit)
规定:使用regex进行字符串切割称为模式匹配
参数regex:
1.如果表达式不匹配输入的任何内容,返回的数组只具有一个元素,即此字符串。(尤其注意空字符串这种情况,他也是一个字符串)
2.可以匹配的情况下,每一个字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止(数组中的字符串按照他们在此字符串出现的顺序排列)
参数:limit:
该参数用于控制模式匹配使用的次数,可以影响到数组的长度
1.limit>0:
模式匹配将被最多应用n-1次,数组的长度将不会大于n,数组的最后一项将包含所有超出最后匹配的定界符的输入。
2.limit<0:
模式匹配将应用尽可能多的次数,而且数组的长度是任何长度。
3.lilmit=0:
模式匹配将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
对 “boo:and:foo”进行分割(注意空字符串的使用)

浙公网安备 33010602011771号