我正在用pascal编写一个小程序,但我遇到了一个小问题。在其他语言中,有一个名为“split”或“explode”的函数来获取由定义的字符打断的长字符串,并将这个长字符串拆分为几个较小的字符串并将它们分配给一个数组。 这就是我的意思,我想这样做:
longstring:='Word1.Word2.Word3');
Split('.', longstring, OutPutVariable) ;
{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
这不是真正的代码,因为pascal中不存在'split'。我认为它存在于Delphi中。 anypne可以帮我解决这个问题吗?对不起,如果这是一个非常容易的问题,我是编程新手
答案 0 :(得分:8)
使用TStringList
执行如下操作:
procedure SplitText(aDelimiter: Char; const s: String; aList: TStringList);
begin
aList.Delimiter := aDelimiter;
aList.StrictDelimiter := True; // Spaces excluded from being a delimiter
aList.DelimitedText := s;
end;
注意:D2006中添加了StrictDelimiter
属性。
另一种方式:
procedure SplitText(const aDelimiter,s: String; aList: TStringList);
begin
aList.LineBreak := aDelimiter;
aList.Text := s;
end;
可以使用多个字符作为分隔符。
答案 1 :(得分:5)
Delphi RTL已经具备您需要的精确功能System.StrUtils
来自function SplitString(const S, Delimiters: string): TStringDynArray;
单位:
{{1}}
记录为:
将字符串拆分为由指定分隔的不同部分 分隔符。
SplitString将字符串拆分为由。分隔的不同部分 指定的分隔符。 S是要拆分的字符串。 分隔符是包含定义为的字符的字符串 分隔符。
SplitString返回一个类型的字符串数组 System.Types.TStringDynArray包含的分割部分 原始字符串。
答案 2 :(得分:1)
嗯,每个人都在这里发布他们的传统答案,我也会这样做。
我看到已经发布了2个答案,但我不知道第四个答案(基于PChar的ExtractStrings)是否会在这个骗局被关闭之前。
总的来说,这是Split a string into an array of strings based on a delimiter的副本,所有答案都可以在那里看到。
http://jcl.sf.net http://wiki.delphi-jedi.org/wiki/JCL_Help:IJclStringList
var OutPutVariable: iJclStringList;
OutPutVariable := JclStringList().Split('Word1.Word2.Word3','.');
现在
{ OutPutVariable[0] would be 'Word1'}
{ OutPutVariable[1] would be 'Word2'}
{ OutPutVariable[2] would be 'Word3'}
如果您坚持原始索引
{ OutPutVariable[1] would be Word1}
{ OutPutVariable[2] would be Word2}
{ OutPutVariable[3] would be Word3}
然后添加一个存根第0个字符串
OutPutVariable := JclStringList().Split('.Word1.Word2.Word3','.');
或
OutPutVariable := JclStringList().Add('').Split('Word1.Word2.Word3','.', False);
它还提供了Join和许多其他功能。
PS:第四个变体是http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.ExtractStrings