Js下的StringBuilder


搞C#的应该都知道,C#中的StringBuilder效率远远高于String,那在JS中呢?

看看这篇文章的分析:http://www.cnblogs.com/matthew/archive/2008/08/15/1268843.html

通过这篇文章可以看出,在js中也存在同样的问题,

按照这两篇文章:

http://www.cnblogs.com/xeonwell/archive/2007/02/11/stringbuilder_javascript.html

http://www.cnblogs.com/hooyes/archive/2009/12/10/javascript_stringbuilder.html

的处理,我也搞了个js中的StringBuilder来用,在这里记录以来,以便要用的时候好拿:

1/*
2模拟C#中的StringBuilder,提升JS中字符串拼接的效率及性能。
3Author:Jeremy
4Date:2010-10-25
5*/
6
7//对象定义(构造函数)
8//参数:所有参数须为字符串形式.
9//当参数长度为1时,参数值将是字符串之间连接的分隔符
10//当参数长度大于1时,最后一位将是字符串之间的分隔符,其余的参数将是字符串值
11//当不指定参数时,分隔符默认为空白
12//也可以不指定分隔符,而在ToString中显式指定分隔符
13//如:varstr=newStringBuilder(',');则在ToString时,将使用,号作为分隔符连接字符串
14//varstr=newStringBuilder('a','b','c',',');则在ToString时,将输出'a,b,c'
15functionStringBuilder()
16{
17this._buffers=[];
18this._length=0;
19this._splitChar=arguments.length>0?arguments[arguments.length-1]:'';
20
21if(arguments.length>0)
22{
23for(vari=0,iLen=arguments.length-1;i<iLen;i++)
24{
25this.Append(arguments[i]);
26}
27}
28}
29
30//向对象中添加字符串
31//参数:一个字符串值
32StringBuilder.prototype.Append=function(str)
33{
34this._length+=str.length;
35this._buffers[this._buffers.length]=str;
36}
37StringBuilder.prototype.Add=StringBuilder.prototype.append;
38
39//向对象附加格式化的字符串
40//参数:参数一是预格式化的字符串,如:'{0}{1}{2}'
41//格式参数可以是数组,或对应长度的arguments,
42//参见示例
43StringBuilder.prototype.AppendFormat=function()
44{
45if(arguments.length>1)
46{
47varTString=arguments[0];
48if(arguments[1]instanceofArray)
49{
50for(vari=0,iLen=arguments[1].length;i<iLen;i++)
51{
52varjIndex=i;
53varre=eval("/\\{"+jIndex+"\\}/g;");
54TString=TString.replace(re,arguments[1][i]);
55}
56}
57else
58{
59for(vari=1,iLen=arguments.length;i<iLen;i++)
60{
61varjIndex=i-1;
62varre=eval("/\\{"+jIndex+"\\}/g;");
63TString=TString.replace(re,arguments[i]);
64}
65}
66this.Append(TString);
67}
68elseif(arguments.length==1)
69{
70this.Append(arguments[0]);
71}
72}
73
74//字符串长度(相当于ToString()后输出的字符串长度
75StringBuilder.prototype.Length=function()
76{
77if(this._splitChar.length>0&&(!this.IsEmpty()))
78{
79returnthis._length+(this._splitChar.length*(this._buffers.length-1));
80}
81else
82{
83returnthis._length;
84}
85}
86//字符串是否为空
87StringBuilder.prototype.IsEmpty=function()
88{
89returnthis._buffers.length<=0;
90}
91//清空
92StringBuilder.prototype.Clear=function()
93{
94this._buffers=[];
95this._length=0;
96}
97//输出
98//参数:可以指定一个字符串(或单个字符),作为字符串拼接的分隔符
99StringBuilder.prototype.ToString=function()
100{
101if(arguments.length==1)
102{
103returnthis._buffers.join(arguments[1]);
104}
105else
106{
107returnthis._buffers.join(this._splitChar);
108}
109}
110
111//示例:
112/*
113varsb=newStringBuilder('&&');//指定&&为分隔符
114alert(sb.Length());
115sb.Append('hEllo');
116sb.Append('wORLD');
117alert(sb.ToString());//将输出hEllo&&wORLD
118sb.Clear();
119sb.AppendFormat("Hello!{0}{1}{2}",['a','b','c']);
120sb.AppendFormat("Todayis{0}",['周一']);
121alert(sb.ToString());//将输出Hello!abc&&Todayis周一
122sb.Clear();
123sb.AppendFormat("Hello!{0}{1}{2}",'a','b','c');
124sb.Append('World');
125alert(sb.ToString('__'));//将输出Hello!abc__World
126*/

优质内容筛选与推荐>>
1、surging+CentOS7+docker+rancher2.0 入门部署教程
2、HTTP使用BASIC认证的原理及实现方法
3、构建面向对象的应用软件系统框架 第9章
4、Adobe Air开发跨平台程序时遇到的问题
5、scribefire 多博客管理利器 安装详解


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号