是否有Delphi函数可以通过多字符分隔符而不是单个字符来分割字符串?
例如,当我以这种方式使用该功能时:
SplitString('Whale<->Mammal<->Ocean', '<->')
我会得到这3个字符串的结果:
'Whale', 'Mammal', 'Ocean'
Delphi中有这样的功能吗?
答案 0 :(得分:36)
使用TStringList还有另一个非常简单的解决方案。更改LineBreak:
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;
答案 1 :(得分:7)
您可以检查属于Cromis Library
的StringUtils.pas单元那里有一个简单的文本标记器。但可能正是你所需要的。界面就像那样
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;
将字符串作为分隔符并且还有一个以上的分隔符。
答案 2 :(得分:4)
如果您安装了JCL,则在jclStrings
单元中有StrToStrings
个程序:
var sl: TStringList;
begin
sl := TStringList.Create;
StrToStrings('Whale<->Mammal<->Ocean' , '<->' , sl);
答案 3 :(得分:3)
我不知道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;
希望有所帮助......
答案 4 :(得分:3)
“来自盒子”没有这样的功能。如果你的字符串包含常规的“好”文本,那么你可以使用具有奇异符号的StringReplace,否则使用Pos或IdStrings.SplitString(如果它在D2010中可用)编写自己的拆分函数并不困难
function SplitStringByStr(const S, StrDelimiter: string): TStringDynArray;
var
tmp: string;
begin
tmp := StringReplace(S, StrDelimiter, '`', [rfReplaceAll]);
Result := SplitString(tmp, '`');
end;
答案 5 :(得分:0)
较新版本的Delphi具有执行此操作的stringhelper:
var
lStr: string;
lSplitStr: TArray<string>;
begin
lStr := 'Whale<->Mammal<->Ocean';
lSplitStr := lStr.Split('<->');
end;
现在lSplitStr是一个包含3个元素的数组:“鲸鱼”,“哺乳动物”,“海洋”。