using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringBulider
{
class Program
{
/*
* StringBulider:
* 1.添加
* 2.移除
* 3.插入
* 4.代替
*
* StringBulider比String好处在于动态处理字符,无需开新空间
* 但是StringBulider缺点是线程不安全
*/
static void Main(string[] args)
{
//StringBulider的用法
//StringBulider的Append用法
StringBuilder bulider = new StringBuilder("2222");
bulider.Append(new char[] { 'a', 'b', 'c', 'd' }, 1, 2);//将一个字符数组的开始下标与结束下标中包含的所有元素按顺序一一添加到stringbulider后边
Console.WriteLine(bulider.ToString());
//StringBulider的AppendFormat用法
StringBuilder builder2 = new StringBuilder("3333");
builder2.AppendFormat("{0},{1}", "a2223", "b2224");//将一组格式化字符串添加到stringbuilder末尾
Console.WriteLine(builder2.ToString());
//StringBulider的Insert用法
StringBuilder builder3 = new StringBuilder("aaaa");
builder3.Insert(2,"尔");
Console.WriteLine(builder3.ToString());
//StringBulider的移除用法
StringBuilder builder4 = new StringBuilder("qq11");
builder4.Remove(1, 3);
Console.WriteLine(builder4.ToString());//字符串删除,这里需要注意字符串删除的话指明下标要记得避免越界
//StringBulider的替换用法
StringBuilder builder5 = new StringBuilder("yyyy");
builder5.Replace('y', 'w', 1, 3);
Console.WriteLine(builder5.ToString());//字符串替换,这里仍然要注意越界问题
//传说中string动态修改的速度比不上stringbuilder,这里我自己手码一下
Console.WriteLine("string>>");
DateTime stringTime = DateTime.Now;
DateTime stringendTime;
string value = "1";
for (int i = 0; i < 50000; i++)
{
value += i;//这里string动态修改的方法会新开内存,产生gc,所以这里用了2s多
}
stringendTime = DateTime.Now;
Console.WriteLine((stringendTime - stringTime).TotalSeconds);
Console.WriteLine("stringbuilder>>");
stringTime = DateTime.Now;
StringBuilder builders = new StringBuilder("1");
for (int i = 0; i < 50000; i++)
{
builders.Append(i);//这里则用了0.01秒不够,足足比string快了n倍
}
stringendTime = DateTime.Now;
Console.WriteLine((stringendTime - stringTime).TotalSeconds);
/*
* 本人不才
*
* 没有将stringbuilder的线程安全将其演绎出来
*
* 所以这个坑留到多线程里边解答
*
*/
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringBulider
{
class Program
{
/*
* StringBulider:
* 1.添加
* 2.移除
* 3.插入
* 4.代替
*
* StringBulider比String好处在于动态处理字符,无需开新空间
* 但是StringBulider缺点是线程不安全
*/
static void Main(string[] args)
{
//StringBulider的用法
//StringBulider的Append用法
StringBuilder bulider = new StringBuilder("2222");
bulider.Append(new char[] { 'a', 'b', 'c', 'd' }, 1, 2);//将一个字符数组的开始下标与结束下标中包含的所有元素按顺序一一添加到stringbulider后边
Console.WriteLine(bulider.ToString());
//StringBulider的AppendFormat用法
StringBuilder builder2 = new StringBuilder("3333");
builder2.AppendFormat("{0},{1}", "a2223", "b2224");//将一组格式化字符串添加到stringbuilder末尾
Console.WriteLine(builder2.ToString());
//StringBulider的Insert用法
StringBuilder builder3 = new StringBuilder("aaaa");
builder3.Insert(2,"尔");
Console.WriteLine(builder3.ToString());
//StringBulider的移除用法
StringBuilder builder4 = new StringBuilder("qq11");
builder4.Remove(1, 3);
Console.WriteLine(builder4.ToString());//字符串删除,这里需要注意字符串删除的话指明下标要记得避免越界
//StringBulider的替换用法
StringBuilder builder5 = new StringBuilder("yyyy");
builder5.Replace('y', 'w', 1, 3);
Console.WriteLine(builder5.ToString());//字符串替换,这里仍然要注意越界问题
//传说中string动态修改的速度比不上stringbuilder,这里我自己手码一下
Console.WriteLine("string>>");
DateTime stringTime = DateTime.Now;
DateTime stringendTime;
string value = "1";
for (int i = 0; i < 50000; i++)
{
value += i;//这里string动态修改的方法会新开内存,产生gc,所以这里用了2s多
}
stringendTime = DateTime.Now;
Console.WriteLine((stringendTime - stringTime).TotalSeconds);
Console.WriteLine("stringbuilder>>");
stringTime = DateTime.Now;
StringBuilder builders = new StringBuilder("1");
for (int i = 0; i < 50000; i++)
{
builders.Append(i);//这里则用了0.01秒不够,足足比string快了n倍
}
stringendTime = DateTime.Now;
Console.WriteLine((stringendTime - stringTime).TotalSeconds);
/*
* 本人不才
*
* 没有将stringbuilder的线程安全将其演绎出来
*
* 所以这个坑留到多线程里边解答
*
*/
Console.ReadKey();
}
}
}