Delphi 如何在某个字符处拆分字符串?

Delphi 如何在某个字符处拆分字符串?,delphi,Delphi,如何将一行文本(例如,Hello there*3)拆分为一个数组?*之前的所有内容都需要添加到第一个元素,而*之后的所有内容都需要添加到第二个元素。我相信这是可能的。稍后我需要回忆一下,第一项和第二项必须相互关联 我用的是Delphi7 type TStringPair = array[0..1] of string; function SplitStrAtAmpersand(const Str: string): TStringPair; var p: integer; begin

如何将一行文本(例如,
Hello there*3
)拆分为一个数组?
*
之前的所有内容都需要添加到第一个元素,而
*
之后的所有内容都需要添加到第二个元素。我相信这是可能的。稍后我需要回忆一下,第一项和第二项必须相互关联

我用的是Delphi7

type
  TStringPair = array[0..1] of string;

function SplitStrAtAmpersand(const Str: string): TStringPair;
var
  p: integer;
begin
  p := Pos('&', Str);
  if p = 0 then
    p := MaxInt - 1;      
  result[0] := Copy(Str, 1, p - 1);
  result[1] := Copy(Str, p + 1);
end;
或者,如果你不喜欢魔法

function SplitStrAtAmpersand(const Str: string): TStringPair;
var
  p: integer;
begin
  p := Pos('&', Str);
  if p > 0 then
  begin
    result[0] := Copy(Str, 1, p - 1);
    result[1] := Copy(Str, p + 1);
  end
  else
  begin
    result[0] := Str;
    result[1] := '';
  end;
end;
如果你,出于一些完全奇怪和有点奇怪的原因,需要一个过程而不是一个函数,那么就去做吧

procedure SplitStrAtAmpersand(const Str: string; out StringPair: TStringPair);
var
  p: integer;
begin
  p := Pos('&', Str);
  if p > 0 then
  begin
    StringPair[0] := Copy(Str, 1, p - 1);
    StringPair[1] := Copy(Str, p + 1);
  end
  else
  begin
    StringPair[0] := Str;
    StringPair[1] := '';
  end;
end;

在我看来,你的“一行”的例子更像是三行。也许你应该弄清楚什么是输入,什么是预期的输出。你使用的是哪个版本的delphi?你说的是“多维数组”,但你的例子表明你只对一维数组感兴趣…@David:这就是为什么我在你发送评论之前就修复了它!这真的很悲哀,尤其是与Python中一个非常可移植的解决方案只需要一行代码相比:
'Hello there*3'。split('*')
@noob:然后用
'*'
替换
'&
。BlaXpirit:是什么阻止了您编写类似于Python的具有类似字符串函数的库?语法可能不同,但结果和易用性可能是相同的。还添加了一些OS X基础字符串函数,并且有了一些很好的工作。noob:为什么你更喜欢它是一个过程而不是一个函数?