如何找到字符串中的前两个单词

How can find the first two word in string

喂!在字符串中查找前两个单词的最佳方法是什么?例如,我的字符串是这样的地址:Cross Keys st 13。我只需要 'Cross Keys' 从它。我应该计算字符串中的单词数还是有更好的解决方案?

第一个字和最后一个字我都能轻松搞定。我是 Delphi 的新人。感谢您的建议。

procedure SampleForm.ButtonClick(Sender: TObject);
var
  st: string;
  myString : string;
  C: integer;
begin
  st := Cross Keys st 13;
  C:=LastDelimiter(' ',st);

  myString := Copy(st,1,pos(' ',st)-1);
  mystring:=Copy(st,C+1,length(st)-C);
procedure TForm9.Button1Click(Sender: TObject);
begin
 ShowMessage(someWord('first second and ...',1));    // show:  first
 ShowMessage(someWord('first second and ...',2));    //show: second
end;

function TForm9.someWord(sir: string; oneWord: integer): string;
var
  myArray: TArray<string>;
begin
  myArray := sir.Split([' ']); //myArray it's an Tstring of Words from sir
  case oneWord of
    1:
      result := myArray[low(myArray)];   // result is first elemnt of myArray; low(myArray)=0
    2:
      begin
        if high(myArray) > 0 then     // high(myArray) index of last element of myArray
          result := myArray[low(myArray) + 1]   // result is second element of myArray
        else
          result := '';
      end;
  end;
end;

范围是 delphi XE,所以 string.split 不起作用。相反,您可以使用 HTTPUtil 中的 IStringTokenizer。像这样:

uses
  HTTPUtil;

function GetFirstNWrods(const str: string; const delim: string; Numwords: Integer): string;
var
  Tokenizer: IStringTokenizer;
begin
  Result := '';
  Tokenizer := StringTokenizer(str, delim);
  while (Tokenizer.hasMoreTokens) and (Numwords > 0) do
  begin
    Result := Result + Tokenizer.nextToken + delim;
    Dec(Numwords)
  end;

  System.Delete(Result, Length(Result) - Length(delim) + 1, Length(delim));
end;

函数调用示例:

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := GetFirstNWrods('1 2 3 4', ' ', 2);
end;