DelphiTStringBuilder详解 java stringbuilder

TStringBuilder,可以理解他为一个字符数组,但是具有一个String对象支持的所有功能,因此,可以把一个TStringBuilder对象理解为一个可以编辑的字符串。在DelphiXE4中明确说明:TStringBuilder完全与.NETframework的StringBuilder完全兼容,如此说,易博龙还真有把C#程序员要拉过来的想法,并且这个想法还是在2008年,让人佩服。跑题了...
还是看看TStringBuilder的属性与方法:

1.Append:为StringBuilder增加内容.

这个方法重载了N多个版本,可以把任意类型的变量加入到SB中,该想到的都实现了。


2.AppendFormat:加一个格式化的字符串


例如:
var
sb:TStringBuilder;
Begin
sb:=TStringBuilder.Create;
sb.AppendFormat('%dtimes',[1000]);
showmessage(sb.ToString);//显示1000

3.AppendLine:加入一个换行符
例:
sb.Append('我是中国人')
.AppendLine()
.Append('我爱中国.');



4.CopyTo:将StringBuilder指定部分的字符复制到TCharArray类型的变量中,同时,将目标实例中对应的字符替换掉。
参数说明:
SourceIndex:StringBuilder指定的起始位置,位置从0开始;
Destination:复制到的目标实例,类型为TCharArray;
DestionationIndex:目标实例的起启位置,位置也从0开始;
Count:复制字符数

例:
procedure TForm1.Button1Click(Sender: TObject);
var
sb:TStringBuilder;
ca:TCharArray;
begin
SetLength(ca,5);//初始化长度
sb:=TStringBuilder.Create;

sb.Append('0123456789');

sb.CopyTo(1,ca,0,5);//把12345复制到ca中

sb.Clear;//清空sb
sb.Append(ca);
ShowMessage(sb.ToString); //显示12345

end;

5.EnsureCapacity:设置SB的大小
参数:
aCapacity:要重新设置SB新的长度的值,当设置的值大于StringBuilder的Capacity值时,再分配内存给SB.
返回值:
返回SB新的长度值。

6.Equals:比较两个StringBuilder是否相等
实际比较的是两个SB中Chars,Length及MaxCapacity三个属性值是否相同。(:文档中说是Chars,Capacity及MaxCapacity三个属性是错误的)。
列:
procedure TForm1.Button2Click(Sender: TObject);
var
sb1,sb2:TStringBuilder;
begin
sb1:=TStringBuilder.Create;
sb2:=TStringBuilder.Create;
sb1.Append('0123456789');
sb2.Append('0123456789');
if sb1.Equals(sb2) then
ShowMessage('相等');//这个对话框会显示

//sb1.EnsureCapacity(20);
sb1.Capacity:=20;//增加sb1的长度
if not sb1.Equals(sb2) then
ShowMessage('不相等');//这个不显示

sb1.Length:=20;
if not sb1.Equals(sb2) then
ShowMessage('不相等');//这个显示对话框

end;

最后看一下源码,就是比较的SB的Length,MaxCapacity及Chars三个属性:
FData保存SB的Chars值,是一个TArrayChar类型。

function TStringBuilder.Equals(StringBuilder: TStringBuilder):Boolean;
begin
Result := (StringBuilder <> nil) and(Length = StringBuilder.Length) and
(MaxCapacity= StringBuilder.MaxCapacity) and
CompareMem(@FData[0], @StringBuilder.FData[0], Length *SizeOf(Char));
end;

7.Insert:向StringBuilder的指定位置插入新的值,这个方法重载了多个版本,支持各种数据类型。

8.Remove:删除

9.Replace:将SB的内容中指定的值替换为新值,重载了四个版本:
function Replace(const OldChar: Char; const NewChar: Char): TStringBuilder; overload;
替换一个特定的字符
例:
procedure TForm1.Button3Click(Sender: TObject);
var
sb:TStringBuilder;
begin
sb:=TStringBuilder.Create;
sb.Append('01234567890');
sb.Replace('0','x');
ShowMessage(sb.ToString);//显示x123456789
end;

function Replace(const OldValue: string; const NewValue: string): TStringBuilder; overload;
替换指定的字符串

procedure TForm1.Button3Click(Sender: TObject);
var
sb:TStringBuilder;
begin
sb:=TStringBuilder.Create;
sb.Append('01234567890');
sb.Replace('012345','xxxxxx');
ShowMessage(sb.ToString);//显示xxxxxx6789
end;

function Replace(const OldChar: Char; const NewChar: Char; StartIndex: Integer; Count: Integer): TStringBuilder; overload;
从指定位置开始替换特定的字符
function Replace(const OldValue: string; const NewValue: string; StartIndex: Integer; Count: Integer): TStringBuilder; overload;
从指定位置开始替换特定的字符串
10.Capacity:设置SB的长度,这个属性会分配内存,但不会改变Length的值(没明白为什么不改变)

11.Chars:读取一个字符,实际上就是读取内部FData的指定字符,FData的类型为TArrayChar.
例:
procedure TForm1.Button4Click(Sender: TObject);
var
sb:TStringBuilder;
i:Integer;
begin
sb:=TStringBuilder.Create;
sb.Append('中国人');
for i := 0 to sb.Length-1 do
ShowMessage(sb.Chars[i]);//显示三次,每次显示一个汉字

ShowMessage(sb.Length.ToString);//显示3
end;

12.Length:重新设置SB的长度,这个属性会分配内存,也会改变Capacity的值。所以,建议用Length来设置Sb的大小。
当设置的长度小时SB内部的字符数组(内部的FData)的长度时,自动截取FData;
sb.Append('01234567890');
sb.Length:=2;
ShowMessage(sb.ToString);//显示01
注:delphihelp中说如果给定的Length大于SB内部的字符数组长度时,分配内存再用空格填充。经查是错误的说法。查看代码,只是对内部的FData重新分配了长度。

13.MaxCapacity:最大长度,默认值为MaxInt 值为:$7FFFFFFF

14.ToString:将SB转换为String。重载了两个版本:
a.ToString:string; 无参数,将SB的内容全部输出为一个String
b.ToString(StartIndex:Integer;StrLength:Integer):string;指定SB的一个位置开始,并指定长度,输出为String.
小结:通过查看TStringBuilder的代码,整体感觉就是对FData:TArrayChar的封装,并且是按.NET的StringBuilder来实现,能过提供的属性与方法,用以操作一个Char数组,达到象操作一个字符串一样。




  

爱华网本文地址 » http://www.413yy.cn/a/25101013/161749.html

更多阅读

如何填写政治面貌?详解 如何查看自己政治面貌

如何填写政治面貌?【详解】——简介政治面貌可不是指的人的外貌,政治面貌其实是一个人的政治身份。对于我们普通公民而言,政治身份似乎没有什么影响,但是对于当权者或者机构组织而言,政治面貌就很重要了,在对个人考察方面或者职位提升方面

不同脸型适合画眉方法,详解眉毛的画法 方脸型画眉

?特写看一下...  对于圆脸型的妹子来说,需要有一些角度的眉毛,把眉峰吊起来,让脸型看起来更有棱角一些~对于下巴比较宽或者太阳穴比较窄的妹纸,美貌的形状要大气自然,而且要适当的短一些,并且加重眉头部分不同脸型适合画眉方法,详解

100道门2013攻略100关图文详解:1 第1~10关

100道门2013攻略100关图文详解:[1]第1~10关——简介100道门2013是安卓平台一款新颖的解密益智游戏,你需要在房间中发现线索,然后把门打开进入下一个房间。每一个房间的主题都不一样,将给你带来百次不同的游戏体验!100道门2013攻略100关

CSOL咆哮怒焰M14EBR详解以及专业强化分析 csol咆哮怒焰强化

众所周知,咆哮怒焰系列是威力最大的突击步枪,其高威力以及不俗的精准度让它成为了一把点射神器。而强化系统更是让这把大威力步枪如虎添翼,咆哮怒焰可以算是最值得强化的几把枪支之一了。下面是这把枪的简略评测,以及它的强化详解。大家

研究生网上报名流程 超详解 2017研究生报名流程

研究生网上报名流程 【超详解】——简介现在开始报名的话,是针对应届的毕业生的,不过过段时间都可以报名的。流程都是一样的。研究生网上报名流程 【超详解】——方法/步骤研究生网上报名流程 【超详解】 1、首先,我们搜索,进入到中国

声明:《DelphiTStringBuilder详解 java stringbuilder》为网友靈感來源分享!如侵犯到您的合法权益请联系我们删除