C# StringBuilder的用法(非常详细,附带实例)
C# 程序中使用 String 类创建字符串时,字符串内容是不可变的,但是因为每次执行特定方法后,都有新字符串产生,所以如果频繁使用就会大大地增加系统的负荷。
C# 提供了另一种字符串类 StringBuilder,这个类最大的特色是字符串声明后,未来还可以更改字符串的内容,如果需要频繁更改字符串内容的话,这个类的方法可以增加系统效率。
StringBuilder 类在 System.Text 命名空间内,所以在声明此类前需要使用 using 引用此命名空间:
例如,声明 StringBuilder 字符串变量,然后输出:
【实例】认识 StringBuilder 字符串变量的属性。
【实例】将 StringBuilder 字符串转为 String 字符串,然后输出:
【实例】清除字符串 Clear() 的应用。
上述语句会将 str 加到 strBuilder 对象末端,如果 str 是字符,可以增加第 2 个整数 Int32 参数,注明字符重复次数(repeats),此时语法如下:
【实例】Append() 方法的应用。
【实例】5 颗星评鉴 War and Peace 小说的应用,这个程序使用了 Insert() 和 Append() 方法。
此外,也可以指定替换的位置和长度,而不是全部替换,语法如下:
【实例】将全部的文章改为教程。
C# 提供了另一种字符串类 StringBuilder,这个类最大的特色是字符串声明后,未来还可以更改字符串的内容,如果需要频繁更改字符串内容的话,这个类的方法可以增加系统效率。
StringBuilder 类在 System.Text 命名空间内,所以在声明此类前需要使用 using 引用此命名空间:
using System.Text;基础的声明 StringBuilder 字符串变量的方法如下:
StringBuilder strBuilder = new StringBuilder(str); //不设定字符串容量 StringBuilder strBuilder = new StringBuilder(str, capacity);//设定字符串容量上述语句中 strBuilder 是字符串变量名称,str 是字符串内容,capacity 是指字符串容量,如果省略 capacity 则使用默认长度 16,如果容量不够则会自动翻倍。如果增加了 capacity 参数,则表示会设定此字符串的容量。
例如,声明 StringBuilder 字符串变量,然后输出:
using System.Text; StringBuilder strBuilder1 = new StringBuilder("DeepMind"); Console.WriteLine(strBuilder1); StringBuilder strBuilder2 = new StringBuilder("Deepen your mind", 32); Console.WriteLine(strBuilder2);执行结果为:
DeepMind
Deepen your mind
C# StringBuilder的属性
StringBuilder 字符串的属性有下列几种:- Length:字符串长度;
- Capacity:字符串容量;
- Chars[]:取得指定位置的字符,表示可以用索引来取得字符串的字符;
- MaxCapacity:最大字符串容量,这是整数 Int32 的最大值;
【实例】认识 StringBuilder 字符串变量的属性。
using System.Text; StringBuilder strBuilder = new StringBuilder("War and Peace"); int len = strBuilder.Length; int cap = strBuilder.Capacity; int maxCap = strBuilder.MaxCapacity; Console.Write("原始字符串 :"); for (int i = 0; i < len; i++) Console.Write(strBuilder[i]); Console.WriteLine(); Console.WriteLine($"字符串长度 :{len}"); Console.WriteLine($"字符串容量 :{cap}"); Console.WriteLine($"字符串最大容量:{maxCap}");执行结果为:
原始字符串 :War and Peace
字符串长度 :13
字符串容量 :16
字符串最大容量:2147483647
C# StringBuilder类常用的方法
StringBuilder 的方法主要是更改对象的内容,而不会回传对象。下表是 StringBuilder 常用的方法。方法 | 说明 |
---|---|
ToString() | 将 StringBuilder 对象转为 String 字符串。 |
Clear() | 清除字符串。 |
Append() | 将指定内容加到对象末端。 |
Insert() | 将指定内容插入对象。 |
Replace() | 用指定内容替换对象部分内容。 |
1) ToString()
ToString() 方法可以将 StringBuilder 字符串转为 String 字符串,此方法的语法如下:strBuilder.ToString(); // strBuilder是StringBuilder对象
【实例】将 StringBuilder 字符串转为 String 字符串,然后输出:
using System.Text; StringBuilder strBuilder = new StringBuilder("War and Peace"); Console.WriteLine($"StringBuilder类的字符串输出:{strBuilder}"); String str = strBuilder.ToString(); Console.WriteLine($"String类的字符串输出:{str}");执行结果为:
StringBuilder类的字符串输出:War and Peace
String类的字符串输出:War and Peace
2) Clear()
Clear() 方法可以清除 StringBuilder 字符串,但是此字符串仍存在,只是变成长度是 0,没有内容的字符串,此方法的语法如下:strBuilder.Clear() // strBuilder是StringBuilder对象
【实例】清除字符串 Clear() 的应用。
using System.Text; StringBuilder strBuilder = new StringBuilder("War and Peace"); Console.WriteLine($"字符串内容:{strBuilder}"); Console.WriteLine($"字符串长度:{strBuilder.Length}"); strBuilder.Clear(); Console.WriteLine("执行Clear()后"); Console.WriteLine($"字符串内容:{strBuilder}"); Console.WriteLine($"字符串长度:{strBuilder.Length}");执行结果为:
字符串内容:War and Peace
字符串长度:13
执行Clear()后
字符串内容:
字符串长度:0
3) Append()
Append() 方法可以将指定内容加到 StringBuilder 对象末端,Append() 方法是基础语法如下:strBuilder.Append(str); // strBuilder是StringBuilder对象
上述语句会将 str 加到 strBuilder 对象末端,如果 str 是字符,可以增加第 2 个整数 Int32 参数,注明字符重复次数(repeats),此时语法如下:
strBuilder.Append(ch, repeats); // 将ch字符重复repeats次
【实例】Append() 方法的应用。
using System.Text; StringBuilder novel = new StringBuilder("War and Peace"); StringBuilder star = new StringBuilder("*****"); StringBuilder result1 = new StringBuilder(""); result1.Append(star); result1.Append(novel); result1.Append(star); Console.WriteLine(result1); // 另一种方式处理 Append() 方法 StringBuilder result2 = new StringBuilder(""); Console.WriteLine(result2.Append(star).Append(novel).Append(star));执行结果为:
*****War and Peace*****
*****War and Peace*****
4) Insert()
Insert() 方法的用法有许多,最常见的应用是在指定索引处插入字符串,此时语法如下:strBuilder.Insert(offset, char[] str);经过上述插入后,字符串 Builder 内容会更新。
【实例】5 颗星评鉴 War and Peace 小说的应用,这个程序使用了 Insert() 和 Append() 方法。
using System.Text; StringBuilder novel = new StringBuilder("War and Peace"); Console.WriteLine($"原始字符串:{novel}"); novel.Insert(0, "*****"); // 使用 Insert() Console.WriteLine($"第 1 次插入结果:{novel}"); novel.Append("*****"); // 使用 Append() Console.WriteLine($"第 2 次插入结果:{novel}");执行结果为:
原始字符串:War and Peace
第 1 次插入结果:*****War and Peace
第 2 次插入结果:*****War and Peace*****
5) Replace()
Replace() 的功能是用新字符或是新字符串替换旧字符或旧字符串,此方法的用法如下:strBuilder.Replace(oldChar, newChar); // 所有oldChar用newChar替换 strBuilder.Replace(oldStr, newStr); // 所有oldStr用newStr替换
此外,也可以指定替换的位置和长度,而不是全部替换,语法如下:
strBuilder.Replace(oldChar, newChar, Int32, Int32); strBuilder.Replace(oldStr, newStr, Int32, Int32);上述语句中第 1 个 Int32 是指在这个索引位置进行替换,第 2 个 Int32 是长度,其意义也就是在指定位置长度区间,如果出现 oldChar/oldStr 则用 newChar/newStr 替换。
【实例】将全部的文章改为教程。
using System.Text; var sentence = "C#文章和C语言文章"; var strBuilder = new StringBuilder(sentence); Console.WriteLine($"原始字符串:{strBuilder}"); strBuilder.Replace("文章", "教程"); Console.WriteLine($"替换结果:{strBuilder}");执行结果为:
原始字符串:C#文章和C语言文章
替换结果:C#教程和C语言教程