StringBuilder的实现与技巧(转)
1.Length
0.说明
System.Text.StringBuilder sb =newSystem.Text.StringBuilder();
1.Length的用法
System.Text.StringBuilder sb =newSystem.Text.StringBuilder();
sb.Append("");//添加一个字符串
sb.Length=;//设置容量为3
Console.WriteLine( sb.ToString());//这里输出:123
sb.Length=;//重新设置容量为30
Console.WriteLine( sb.ToString()+",结尾");//这里在原来字符串后面补齐空格,至到Length的为30
Console.WriteLine( sb.Length);//这里输出的长度为30
2.Capacity
1.代码
System.Text.StringBuilder sb =newSystem.Text.StringBuilder();//初始化一个StringBuilder
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
sb.Append('',);//添加一个字符串,这里故意添加17个字符,是为了看到Capacity是如何被扩充的
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
sb.Append('',);//添加一个字符串
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
sb.Append('',);//添加一个字符串
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
//注意这里:如果你取消Remove这步操作,将会引发ArgumentOutOfRangeException异常,因为当前容量小于
//Length,这在自己控制StringBuilder的时候务必要注意容量溢出的问题
sb.Remove(,sb.Length);//移出全部内容,再测试
sb.Capacity=;//重新定义了容量
sb.Append('a',);
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
sb.Append('b',);
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length);
sb.Append('c',);
Console.Write("Capacity:"+ sb.Capacity);//这里的Capacity会自动扩大
Console.WriteLine("\t Length:"+ sb.Length
2.输出结果
Capacity:16Length://输出第一次,默认的Capacity是16
Capacity:32Length://第二次,我们故意添加了17个字符,于是Capacity=Capacity*2
Capacity:64Length://继续超出,则Capacity=Capacity*2
Capacity:128Length:
Capacity:3Length://清空内容后,设置Capacity=1,重新添加了字符
Capacity:7Length://后面的结果都类似
Capacity:14Length:
3.说明
if ( Capacity < Length && Capacity > ){
Capacity *= ;
}
OK..看到公式就明白了..StringBuilder是以当前的Capacity*2来扩充的
System.Text.StringBuilder sb =newSystem.Text.StringBuilder();
int i =;
longStartTime=DateTime.Now.Ticks;
while( i <)
{
sb.Append( i.ToString());
i++;
}
longEndTime=DateTime.Now.Ticks;
Console.WriteLine("时间:"+(EndTime-StartTime)+"\t Capacity:"+ sb.Capacity+"\t Length:"
+ sb.Length);
System.Text.StringBuilder sb1 =newSystem.Text.StringBuilder();
i =;
StartTime=DateTime.Now.Ticks;
while( i <)
{
if( sb1.Capacity<= sb1.Length)//先判断是否>Length
{
sb1.Capacity+=;//这里一定要根据情况的增加容量,否则会有性能上的消耗
}
sb1.Append( i.ToString());
i++;
}
EndTime=DateTime.Now.Ticks;
Console.WriteLine("时间:"+(EndTime-StartTime)+"\t Capacity:"+ sb1.Capacity+"\t
Length:" + sb1.Length);
3.StringBuilder.Append 与 string+的性能比较
0.说明
1.代码
System.Text.StringBuilder sb =newSystem.Text.StringBuilder();
int i =;
longStartTime=DateTime.Now.Ticks;
while( i <)
{
sb.Append( i.ToString());
i++;
}
longEndTime=DateTime.Now.Ticks;
Console.WriteLine("时间:"+(EndTime-StartTime));
string sb1 =null;
i =;
StartTime=DateTime.Now.Ticks;
while( i <)
{
sb1 += i;
i++;
}
EndTime=DateTime.Now.Ticks;
Console.WriteLine("时间:"+(EndTime-StartTime));
2.总结
StringBuilder的实现与技巧(转)的更多相关文章
- StringBuilder的实现与技巧ZZ
在上一篇进一步了解String 中,发现了string的不便之处,而string的替代解决方案就是StringBuilder的使用..它的使用也很简单System.Text.StringBuild ...
- C#自学笔记总结
一.变量:声明变量的语法:变量类型 变量名; 变量名=值;变量类型 变量名=值: 在使用变量的时候要注意:变量一定要先声明,再赋值,最后使用例子: 变量的特点:1.不能够被重复的声明2.可以被重复的赋 ...
- 聊聊c#字符串拼接
字符串对我编程人员来说是字符串时每天见面的常客,你不认识不熟悉他都不得行,字符串的拼接更是家常便饭,那么在实际开发过程中实现字符串的拼接有哪一些方式呢?咱们一起来聊聊,来交流沟通,学习一波.也许你会说 ...
- java字符串拼接技巧(StringBuilder使用技巧)
在平时的开发中,我们可能会遇到需要拼接如下格式的字符串(至少我是遇到了很多次): 1,2,3,4,5,6,7,8,9,10,11,12,12,12,12,34,234,2134,1234,1324,1 ...
- SQL开发技巧(二)
本系列文章旨在收集在开发过程中遇到的一些常用的SQL语句,然后整理归档,本系列文章基于SQLServer系列,且版本为SQLServer2005及以上-- 文章系列目录 SQL开发技巧(一) SQL开 ...
- EF查询之性能优化技巧
上一篇:EF使用CodeFirst方式生成数据库&技巧经验 前言 EF相信大部分同学都已经经常使用了,可是你的查询高效吗? 今天我就以个人使用经验来讲讲在使用EF做查询的时候大家都容易忽略的性 ...
- FineUI小技巧(7)多表头表格导出
前言 之前我们曾写过一篇文章 FineUI小技巧(3)表格导出与文件下载,对于在 FineUI 中导出表格数据进行了详细描述.今天我们要更进一步,介绍下如何导出多表头表格. 多表头表格的标签定义 在 ...
- FineUI小技巧(1)简单的购物车页面
起因 最初是一位 FineUI 网友对购物车功能的需求,需要根据产品单价和数量来计算所有选中商品的总价. 这个逻辑最好在前台使用JavaScript实现,如果把这个逻辑移动到后台C#实现,则会导致过多 ...
- C#WebBrowser控件使用教程与技巧收集--苏飞收集
C#WebBrowser控件使用教程与技巧收集--苏飞收集 先来看看常用的方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System. ...
随机推荐
- Redis进阶实践之十 Redis哨兵集群模式
一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...
- 在Android上编写模块化项目(翻译)
来源博客:Wang Jie's Blog 本文链接:http://blog.wangjiegulu.com/2018/02/13/writing_a_modular_project_on_androi ...
- SPSS 批量添加标签
- 机器学习实践之Logistic回归
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...
- CometD的消息推送
CometD 框架 CometD 框架是基于 HTTP 的事件驱动通信解决方案.CometD 框架提供了一个 Java 服务器部件和一个 Java 客户端部件,还有一个基于 jQuery 和 Dojo ...
- 设置修改CentOS系统时区
一.时区 1. 查看当前时区date -R 2. 修改设置时区方法(1)tzselect方法(2) 仅限于RedHat Linux 和 CentOS系统timeconfig方法(3) 适用于Debia ...
- 织梦调用seotitle
如果有seotitle则调用seotitle,没有则调用title {dede:field.array runphp='yes'} if(@me['seotitle']=='') {@me=@me[' ...
- POI导出EXCEL,浏览器不兼容,文件名称乱码,文件无法打开解决方法
- bzoj 2669 [cqoi2012]局部极小值 DP+容斥
2669: [cqoi2012]局部极小值 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 838 Solved: 444[Submit][Status ...
- linux开放80 端口
1.使用su登录管理员用户 2.编辑防火墙配置文件 vim /etc/sysconfig/iptables 3.在里面加入后保存 #open port 80 -A INPUT -p TCP -m st ...