procedure TForm1.Button1Click(Sender: TObject); type//函数返回值不能是array of ...,必须自定义类型,含义还是一样,返回字符串数组 Tas = array of string; //expression:源字符串,delimiter:分隔字符串(默认为空格);可以是 AnsiString 或 WideString 。 function Split(const expression: string; const delimiter: string = ' '): Tas; var sSource,sDelim: WideString;//源字符串和分隔字符串的 WideString 形式,保证处理双字节字符(如汉字) iPos: Integer;//找到的 sDelim 的起始位置,从1开始 iLenDelim: Integer;//sDelim 的字符数,如'你好'就是两个字符 iLenSource: Integer;//sSource 的字符数 iLenResult: Integer;//返回值数组的元素个数 begin sSource := WideString(expression); sDelim := WideString(delimiter); iLenDelim := Length(sDelim); iLenSource := Length(sSource); iLenResult := 1; while True do begin iPos := Pos(sDelim,sSource);//找到当前 sSource 的第一个 sDelim 的起始位置 if iPos = 0 then Break;//没找到就退出循环 //取当前 sSource 的第一个 sDelim 之前的部分,保存到返回值数组 SetLength(Result,iLenResult); Result[iLenResult - 1] := Copy(sSource,1,iPos - 1); iLenResult := iLenResult + 1; //取当前 sSource 的第一个 sDelim 之后的部分,保存到 sSource 以备下一次循环 sSource := Copy(sSource,iPos + iLenDelim,iLenSource); end; //把最后剩下的 sSource 保存到返回值数组 SetLength(Result,iLenResult); Result[iLenResult - 1] := sSource; end; var i: Integer; s: string; a: Tas;//必须声明为它 begin s := ''; a := Split('a b c'); for i := 0 to High(a) do s := s + a[i] + #13#10; ShowMessage(s); end;