999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

String Builder類使用探討

2009-04-29 00:00:00李錦威
電腦知識與技術 2009年33期

摘要:首先對.Net Frameword中字符串內存的存放方式進行了分析,然后針對說明StringBuilder類的工作方式及性能對比,最后給出StringBuilder類常用的方法。

關鍵詞:StringBuilder .Net Frameword 字符串 軟件開發

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)33-9353-02

1 .Net Framework字符串存儲方式及StringBuilder類突破點分析

StringBuilder是.NET Framework一個功能強大的新類,功能是對字符串進行拼接、插入、刪除、替換等操作,從功能而言,并沒有太大的突破,所有的平臺語言對字符串操作都有相對應的功能,StringBuilder的價值在于能高效地實現這些功能,而不是簡單的進行重復。

在解析StringBuilder的高效前,必須首先了解.Net Framework對字符串進行存儲的一個重要特性:所有字符串對應的內存都是不可改變的,也就是說,字符串的內存存儲單元是不可以更改的。在.Net Framework中不可以真正直接改變一個字符串變量的內容,如果更改了一個字符串的取值,那么該字符串原來對應的內存將被作廢,而內存中一個新的地址將被重新創建并分配給字符串去存儲新的取值。例如,下面的代碼對字符串S的取值作出修改:

string S;

S = ¨AAA¨;

S = ¨BBB¨;

由于在.Net Framework中,內存中的字符串的存儲內容不可以更改,每當你改變S的取值,.Net Framework都會在內存的一個新位置重新創建一個新的字符串,所有上面的程序會導致這樣的一個結果:內存在某個位置(假定內存地址為3000)存放S,但位置3000什么都沒有(只有S的初始值);然后在新的位置(3010)存儲了字符串“AAA”,最后在第三個位置(3030)存儲了字符串“BBB”。.Net Framework不斷地創建新的字符串,同時不斷改變S的索引,指向新的內存地址。可見,這種方式非常笨拙,雖然有效但效率不可能高。

StringBuilder類則以完全不同的方式工作,當你創建了StringBuilder類的實例后,你就定義了一個字符串的內存塊,這個內存塊的內容是可以被改變的,通過StringBuilder,我們可以直接改變字符串內存的內容。例如,運用StringBuilder實現上一個例子的功能:

System.Text.StringBuilderSB = new System.Text.StringBuilder();

SB.Append(¨AAA¨);

SB.Replace(¨AAA¨, ¨BBB¨);

.Net Framework首先在內存創建一個新的內存塊(假定內存位置也是3000),開始內容為空,然后變成“AAA”,隨后變成“BBB”。可見從功能的實現上,StringBuilder對比傳統的方式有重大的突破,這是StringBuilder高效性的基礎。

2 StringBuilder性能對比

這種直接修改內存的能力使StringBuilder具備明顯的速度優勢。我們可以通過兩個簡單的功能一樣的循環程序進行驗證。

首先我們不使用StringBuilder,使用傳統方法,直接對string進行操作,對一個字符串進行10000次的拼接:

stringst = ¨¨;

for (int i=0;1<10000;i++){

st += i.ToString();

st +=¨,¨;}

然后我們使用StringBuilder類來實現同樣的功能:

System.Text.StringBuilderSB = new System.Text.StringBuilder();

for (int i=0;1<10000;i++){

SB.Append (i);

SB.Append (,);}

在我的電腦,同樣的硬件配置及系統環境中,使用傳統方法程序運行5秒完成,使用StringBuilder的程序在1秒內完成!可見從效率上兩者之間的差異是很大的。

3 StringBuilder各種功能的實現

3.1 拼接功能

在StringBuilder類中,Append和AppendFormat是最常用的兩個方法,它們實現StringBuilder的拼接功能。Append方法可以直接把一個新值加入到字符串空間,而且新值的數據類型不需要進行轉換。可以使用Append簡單地把每一個變量的內容加入字符串,不用管這個變量的類型是什么,例如把一個bool類型的變量實例直接加入StringBuilder的實例中。

使用AppendFormat可以將各種類型的數據加入字符串空間,并且進行格式化。如下面的例子中,把double類型的變量dou直接加入StringBuilder 的實例SB,并進行格式化,程序運行后將會顯示 $888.88:

double dou=888.88;

System.Text.StringBuilderSB = new System.Text.StringBuilder();

SB.AppendFormat (¨{0:c}¨,dou );

Reponse.Write(SB.ToString());

3.2 插入和刪除功能

在StringBuilder類中,Inert實現插入功能。Insert方法中需給出起始位置和具體字符串值。如你想在字符串“AAA CCC”中插入“BBB”,成為“AAA BBB CCC”可以執行以下代碼:

SB.Append(¨AAA CCC¨);

SB.Insert(4, ¨BBB ¨);

在StringBuilder類中,Remove實現刪除功能。Remove方法中需給出起始位置和刪除字符串的長度,如想把剛才執行完Insert的字符串去掉剛插入的“BBB”可以執行以下代碼:

SB.Remove(4,4);

3.3 替代功能

在StringBuilder類中,Replace實現替代功能。Replace方法需要給需要替換的字符串和替代用的字符串,還可以指定范圍。如你想把“ABCD ABCD”中的“AB”都換成“EF”,字符串變為“EFCD,EFCD”,可以執行以下代碼:

SB.Append(¨ABCD ABCD¨);

SB.Replace(¨AB¨,¨EF¨);

如果只想把“ABCD ABCD”中第一個“AB”都換成“EF”,字符串變為“EFCD,ABCD”,可以指定替代范圍,執行以下代碼:

SB.Append(¨ABCD ABCD¨);

SB.Replace(¨AB¨,¨EF¨,0,4);

3.4 容量監控功能

在StringBuilder類中,通過Capacity屬性設置StringBuilder實例的容量,你可以在實例化StringBuilder時設置初始的容量值,也可以通過類方法EnsureCapacity來自動分配字符串空間,以便隨時容納新數據,如果擔心容量設置錯誤而造成程序報錯,可以使用一個try…catch塊進行恢復。

4 結論

.Net Framework中的字符串存儲不可改變,使用StringBuilder類操作字符串比使用傳統方法高效得多,值得在.Net Framework的開發中使用。

參考文獻:

[1] 朱仲杰.Java2全方位學習[M].北京:機械工業出版社,2006.

[2] 趙克立.C#.NET 編程培訓教程[M].北京:清華大學出版社,2003.

主站蜘蛛池模板: 国产精品原创不卡在线| 中文字幕不卡免费高清视频| 91成人在线免费观看| 色丁丁毛片在线观看| 国产亚洲欧美在线专区| 久久五月视频| 色屁屁一区二区三区视频国产| 国产永久免费视频m3u8| 精品国产欧美精品v| 亚洲成人黄色在线| 亚洲欧美激情小说另类| 一本视频精品中文字幕| 国产全黄a一级毛片| 色综合五月| 国产色婷婷| 亚洲首页在线观看| 婷婷久久综合九色综合88| 2020最新国产精品视频| 国产美女91视频| 重口调教一区二区视频| 国产原创演绎剧情有字幕的| 日韩精品欧美国产在线| 亚洲成人动漫在线| 精品无码一区二区三区电影 | 女高中生自慰污污网站| 中日韩一区二区三区中文免费视频 | 干中文字幕| 国产XXXX做受性欧美88| 国产男女免费完整版视频| 免费AV在线播放观看18禁强制| 久无码久无码av无码| 中国精品自拍| 青草视频免费在线观看| 又爽又大又黄a级毛片在线视频| 国产精品夜夜嗨视频免费视频| 无码 在线 在线| 免费人成网站在线高清| 26uuu国产精品视频| 欧美激情,国产精品| 美女潮喷出白浆在线观看视频| 高清无码手机在线观看| 久久久久久久久18禁秘| 国产在线小视频| 色亚洲激情综合精品无码视频| 亚洲第一成网站| 亚洲欧洲日韩综合色天使| 亚洲大尺码专区影院| 国产麻豆精品久久一二三| 亚洲日产2021三区在线| 欧美激情视频二区三区| 国产女人在线| 亚洲人成影院在线观看| 免费不卡视频| 欧美成人一级| 国产精品亚洲专区一区| 欧洲高清无码在线| 亚洲高清在线播放| 99中文字幕亚洲一区二区| 欧美午夜在线播放| 国产毛片高清一级国语 | 中文成人在线视频| 亚洲精品午夜无码电影网| 久热中文字幕在线| 婷婷综合在线观看丁香| 精品久久国产综合精麻豆| 国产人成在线视频| 亚洲日韩精品欧美中文字幕| 色成人亚洲| 四虎永久在线| 操国产美女| 欧美特黄一级大黄录像| 玖玖精品视频在线观看| 老司国产精品视频91| 精品国产一二三区| 国产精品女主播| 国产国产人免费视频成18 | 99视频只有精品| www精品久久| 国产成人综合亚洲网址| 欧洲亚洲欧美国产日本高清| 亚洲专区一区二区在线观看| 国产欧美综合在线观看第七页|