我在 Java 中进行了这个简单的操作,其中字符串由换行符和换行符分割。
String i= "Holidays
Great.
Bye";
String []linesArray = i.split("\\r?\\n");
我想在 Delphi 2006 中获得相同的结果。
使用以下步骤是否有效?
charArray[0] := '\\r';
charArray[1] := '\\n';
strArray := strA.Split(charArray);
最佳答案
我这样解释你的请求:“在 CR 和 LF 处分割字符串。”这意味着 CR+LF 给出一个空字符串元素。例如,'alpha'#13'beta'#10'gamma'#13#10'delta'
生成五个元素 'alpha'
、'beta '
、'gamma'
、''
和 'delta'
。
如果是这样,并且您使用的是非古老版本的 Delphi,那么这非常简单:
var S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
var Parts := S.Split([#13, #10]);
for var Part in Parts do
ShowMessage(Part);
对于旧的 Delphi 版本
上面的代码需要 TStringHelper
(至关重要),并且还使用了内联变量声明、for in
循环和泛型。
对于旧的 Delphi 版本,您可以手动执行:
type
TStringArray = array of string;
function Split(const S: string): TStringArray;
var
Count: Integer;
const
Delta = 512;
procedure Add(const Part: string);
begin
if Length(Result) = Count then
SetLength(Result, Length(Result) + Delta);
Result[Count] := Part;
Inc(Count);
end;
var
p, i: Integer;
begin
Result := nil;
Count := 0;
p := 0; // previous delim
for i := 1 to Length(S) do
if S[i] in [#13, #10] then
begin
Add(Copy(S, Succ(p), i - p - 1));
p := i;
end;
Add(Copy(S, Succ(p)));
SetLength(Result, Count);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
S: string;
Parts: TStringArray;
i: Integer;
begin
S := 'alpha'#13'beta'#10'gamma'#13#10'delta';
Parts := Split(S);
for i := 0 to High(Parts) do
ShowMessage(Parts[i]);
end;
关于德尔福 (2006) : how to Split by new line and break at the same time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67000545/