下边这个帖子写得很详细很好,请大家参考。
https://www.cnblogs.com/liuqiyun/p/9445022.html
要点如下:
1、尾部添加、中间任意位置插入、删除任意字符
static void Main(string[] args)
{
StringBuilder str2 = new StringBuilder(2);//预设2个空间
str2.Append("111");//串的尾部添加串
Console.WriteLine(str2);
Console.WriteLine("串的长度为{0}",str2.Length);
str2.Append("333");
Console.WriteLine(str2);
Console.WriteLine("串的长度为{0}", str2.Length);
str2.Insert(3, "222");//下标为3的位置插入串
Console.WriteLine(str2);
Console.WriteLine("串的长度为{0}", str2.Length);
str2.Remove(6, 3);//从下标为6处删除3个字符
Console.WriteLine(str2);
Console.WriteLine("串的长度为{0}", str2.Length);
str2.Replace('1', 'x');//把所有的字符1替换成字符x
Console.WriteLine(str2);
Console.WriteLine("串的长度为{0}", str2.Length);
}
2、StringBuilder中字符逆转
很遗憾在StringBuilder中并没有逆转成员函数。
我们前面学过Array,其中有成员函数revese。
所有可以先把StringBuild中字符转成字符数组,然后对字符数组进行reverse,然后把reverse后的字符数组再写回StringBuilder。
这样转了一个大圈,效率比较低。
参考代码如下:
char[] s3;
s3 = str2.ToString().ToCharArray();//新开辟了一个空间,s3和str2所指不是一个空间
Array.Reverse<char>(s3);
str2.Clear();
str2.Append(s3);
Console.WriteLine(str2);
s3[0] = '0';
Console.WriteLine(s3);
Console.WriteLine(str2);
对于这个问题,算法比较简单,就是对应字符进行交换,我们可以直接写倒置算法:
int i, j;
i = 0;j = str2.Length - 1;
for(;i<j;i++,j--)
{
char c;
c = str2[i];str2[i] = str2[j];str2[j] = c;
}
Console.WriteLine(str2);
3、StringBuilder中字符排序
很遗憾在StringBuilder中并没有sort成员函数。
我们前面学过Array,其中有成员函数sort。
所有可以先把StringBuild中字符转成字符数组,然后对字符数组进行sort,然后把reverse后的字符数组再写回StringBuilder。
这样转了一个大圈,效率比较低。
但由于sort算法比较复杂,我们自己写容易出错,所以尽量还是用系统自带的。
(这就不如C++中的sort函数了,能够对数组、vector等进行排序。是否是因为在C#中隐藏了指针,使得不方便了?
我再查查资料。)
static void Main(string[] args)
{
StringBuilder str2 = new StringBuilder(2);//预设2个空间
char[] s3;
str2.Append("456321");
s3 = str2.ToString().ToCharArray();//新开辟了一个空间,s3和str2所指不是一个空间
Array.Sort<char>(s3);
str2.Clear();
str2.Append(s3);
Console.WriteLine(str2);
}
讨论:从StringBuilder这个名字来看,其作用就是为了Build字符串的,build成功后,转成数组或者string都可以。