Allen Wang

专注web开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
Simulates the C# StringBuilder Class in Javascript. Zip file includes a compressed version, speed test and fully commented sourcecode.
http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=cdd24380-e7d7-467f-8462-59c56d0b7ad2

有源代码,并且还有压缩过的源代码

/*
    ##################### DO NOT MODIFY THIS HEADER #####################
    # Title: StringBuilder Class                                        #
    # Description: Simulates the C# StringBuilder Class in Javascript.  #
    # Website: www.codevendor.com                                       #
    # Author: Adam Smith                                                #
    # Email: ibulwark@hotmail.com                                       #
    # Date: November 12, 2006                                           #
    #####################################################################
*/


// Simulates the C# StringBuilder Class in Javascript.
//
 Parameter["stringToAdd"] - The string to add. 
StringBuilder = function(stringToAdd)
{    
    
var h = new Array();
    
if(stringToAdd){h[0= stringToAdd;} 
    
this.Append = Append;
    
this.AppendLine = AppendLine;
    
this.ToString = ToString;
    
this.Clear = Clear;
    
this.Length = Length;
    
this.Replace = Replace;
    
this.Remove = Remove;
    
this.Insert = Insert;
    
this.GetType = GetType;      
    
    
// Appends the string representation of a specified object to the end of this instance.
    // Parameter["stringToAppend"] - The string to append. 
    function Append(stringToAppend)
    
{
        h[h.length] 
= stringToAppend;
    }
 

    
// Appends the string representation of a specified object to the end of this instance with a carriage return and line feed.
    // Parameter["stringToAppend"] - The string to append. 
    function AppendLine(stringToAppend)
    
{
        h[h.length] 
= stringToAppend;
        h[h.length] 
= "\r\n";
    }
 
  
    
// Converts a StringBuilder to a String.
    function ToString()
    
{
        
if(!h)return ""; }
        
if(h.length<2)return (h[0])?h[0]:""; }
        
var a = h.join('');
        h 
= new Array();
        h[
0= a;
        
return a;
    }


    
// Clears the StringBuilder
    function Clear()
    
{
        h 
= new Array();
    }


    
// Gets the StringBuilder Length
    function Length()
    
{
        
if(!h){return 0;}
        
if(h.length<2)return (h[0])?h[0].length:0; }
        
var a = h.join('');
        h 
= new Array();
        h[
0= a;
        
return a.length;
    }


    
// Replaces all occurrences of a specified character or string in this instance with another specified character or string.
    // Parameter["oldValue"] - The string to replace. 
    // Parameter["newValue"] - The string that replaces oldValue. 
    // Parameter["caseSensitive"] - True or false for case replace.
    // Return Value - A reference to this instance with all instances of oldValue replaced by newValue.
    function Replace(oldValue, newValue, caseSensitive)
    
{
        
var r = new RegExp(oldValue,(caseSensitive==true)?'g':'gi');
        
var b = h.join('').replace(r, newValue);
        h 
= new Array();
        h[
0= b;
        
return this;
    }


    
// Removes the specified range of characters from this instance.
    // Parameter["startIndex"] - The position where removal begins. 
    // Parameter["length"] - The number of characters to remove.
    // Return Value - A reference to this instance after the excise operation has occurred.
    function Remove(startIndex, length)
    
{       
        
var s = h.join('');
        h 
= new Array();
    
        
if(startIndex<1){h[0]=s.substring(length, s.length);}
        
if(startIndex>s.length){h[0]=s;}
        
else
        
{
            h[
0]=s.substring(0, startIndex);  
            h[
1]=s.substring(startIndex+length, s.length);
        }

    
        
return this;
    }


    
// Inserts the string representation of a specified object into this instance at a specified character position.
    // Parameter["index"] - The position at which to insert.
    // Parameter["value"] - The string to insert. 
    // Return Value - A reference to this instance after the insert operation has occurred.
    function Insert(index, value)
    
{
        
var s = h.join('');
        h 
= new Array();
    
        
if(index<1){h[0]=value; h[1]=s;}
        
if(index>=s.length){h[0]=s; h[1]=value;}
        
else
        
{
            h[
0]=s.substring(0, index); 
            h[
1]=value; 
            h[
2]=s.substring(index, s.length);
        }

    
        
return this;
    }


    
// Gets the type
    function GetType()
    
{
        
return "StringBuilder";
    }

}
;


所谓的压缩代码其实就是把文件中的空格换行清掉:

StringBuilder=function(A){var h=new Array();if(A){h[0]=A;}this.Append=Append;this.AppendLine=AppendLine;this.ToString=ToString;this.Clear=Clear;this.Length=Length;this.Replace=Replace;this.Remove=Remove;this.Insert=Insert;this.GetType=GetType;function Append(s){h[h.length]=s;}function AppendLine(s){h[h.length]=s;h[h.length]="\r\n";}function ToString(){if(!h){return "";}if(h.length<2){return (h[0])?h[0]:"";}var a=h.join('');h=new Array();h[0]=a;return a;}function Clear(){h=new Array();}function Length(){if(!h){return 0;}if(h.length<2){return (h[0])?h[0].length:0;}var a=h.join('');h=new Array();h[0]=a;return a.length;}function Replace(o,n,c){var r=new RegExp(o,(c==true)?'g':'gi');var b=h.join('').replace(r,n);h=new Array();h[0]=b;return this;}function Remove(i,l){var s=h.join('');h=new Array();if(i<1){h[0]=s.substring(l,s.length);}if(i>s.length){h[0]=s;}else{h[0]=s.substring(0,i);h[1]=s.substring(i+l,s.length);}return this;}function Insert(i,v){var s=h.join('');h=new Array();if(i<1){h[0]=v;h[1]=s;}if(i>=s.length){h[0]=s;h[1]=v;}else{h[0]=s.substring(0,i);h[1]=v;h[2]=s.substring(i,s.length);}return this;}function GetType(){return "StringBuilder";}};