如何找到字符串中的前两个单词
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;
喂!在字符串中查找前两个单词的最佳方法是什么?例如,我的字符串是这样的地址: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;