zoukankan      html  css  js  c++  java
  • 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[1instanceof 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 */
    <h3>
       心静似高山流水不动,心清若巫峰雾气不沾。
    </h3>
  • 相关阅读:
    Web开发用到的导航栏固定顶端,页脚固定低端
    Action Filter 与 内置的Filter实现(实例-防盗链)转
    MVC 通过继承HandleErrorAttribute,使用log4net或ELMAH组件记录异常等
    HTML5中custom data-*特性与asp.net mvc 3 表单验证
    jQuery验证控件jquery.validate.js使用说明+中文API (转)
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案 (转)
    Android定制控件-带图像的TextView
    使用Elmah记录日志
    laravel路由与控制器(资源路由restful)
    npm 常用命令
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1860185.html
Copyright © 2011-2022 走看看