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

 

 

转载于:https://www.cnblogs.com/McJeremy/archive/2010/10/25/1860185.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值