如何通过多字符分隔符来分割字符串?
是否有一个Delphi函数用多字符分隔符而不是单个字符来分割字符串?如何通过多字符分隔符来分割字符串?
例如,当我使用这个函数是这样的:
SplitString('Whale<->Mammal<->Ocean', '<->')
我会得到这3个字符串的结果:
'Whale', 'Mammal', 'Ocean'
有这样的功能在Delphi的呢?
我不知道Delphi是否有一个使用字符串作为分隔符的标准拆分过程。但是你可以写自己要么拥有与否:
procedure SplitStr(const Source, Delimiter: String; var DelimitedList: TStringList);
var
s: PChar;
DelimiterIndex: Integer;
Item: String;
begin
s:=PChar(Source);
repeat
DelimiterIndex:=Pos(Delimiter, s);
if DelimiterIndex=0 then Break;
Item:=Copy(s, 1, DelimiterIndex-1);
DelimitedList.Add(Item);
inc(s, DelimiterIndex + Length(Delimiter)-1);
until DelimiterIndex = 0;
DelimitedList.Add(s);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl:=TStringList.Create;
SplitStr('delphi++split++string++','++',sl);
//do something with the list
sl.Free;
end;
希望它可以帮助..
有“从盒子”没有这样的功能。如果你的字符串包含常规“好”的文字,那么你可以使用StringReplace具有异国情调的象征,否则就不是很难用波什或IdStrings.SplitString写自己分割功能(如果是在D2010提供)
function SplitStringByStr(const S, StrDelimiter: string): TStringDynArray;
var
tmp: string;
begin
tmp := StringReplace(S, StrDelimiter, '`', [rfReplaceAll]);
Result := SplitString(tmp, '`');
end;
你可以检查我的StringUtils.pas单元是Cromis Library的一部分
那里有一个简单的文本标记器。但可能只是你需要的东西。界面是这样的
TTextTokenizer = class
private
FTokens: TTokens;
FDelimiters: array of ustring;
public
constructor Create;
procedure Tokenize(const Text: ustring);
procedure AddDelimiters(const Delimiters: array of ustring);
property Tokens: TTokens read FTokens;
end;
支持字符串作为分隔符,还多一个分隔符。
我以前没有听说过Cromis。克罗米斯是否有单元测试?我无法在下载zip中找到任何内容。另外,最好在线浏览代码,或者至少一些API文档(只是一个建议) – awmross 2013-03-15 16:47:53
它是一个库,我使用了大量的生产代码,如果他们愿意,可以将它分享给其他人。我仍然需要覆盖一些测试单位。对于大多数主要部分,我都有演示程序,涵盖了大部分功能。我将扩展测试覆盖范围并将SVN公开。但是这些日子我没有太多时间,文件可能会很晚。一些组件被很多人使用,特别是IPC和Scheduler。 – Runner 2013-03-15 18:33:21
信任你在另一个答案中发布的信息来源,它只会在分隔符上标记一次,也不会以任何随机顺序对它们进行标记。 – 2016-01-13 16:44:33
还有一个非常简单的解决方案使用TStringList。更改断行:
procedure TForm208.Button1Click(Sender: TObject);
var
lst: TStringList;
begin
lst := TStringList.Create;
try
lst.LineBreak := '<->';
lst.Text := 'Whale<->Mammal<->Ocean';
Memo1.Lines := lst;
finally
lst.Free;
end;
end;
如果您安装,然后JCL在jclStrings
单位有StrToStrings
程序:
var sl: TStringList;
begin
sl := TStringList.Create;
StrToStrings('Whale<->Mammal<->Ocean' , '<->' , sl);
要你接近选民:请阅读这两个问题。这显然不是一个愚蠢的http://stackoverflow.com/questions/2625707/split-a-string-into-an-array-of-strings-based-on-a-delimiter – 2013-03-15 11:43:56