检查字符串是否包含子字符串,但最后不是

时间:2015-03-18 07:15:19

标签: delphi

在delphi中是否有内置函数来查找字符串是否包含子字符串,但最后不是

例如,假设我有这些字符串:

G15001,
G15005,
G15015,
G14015,
G14004,
PLU15010,
PLU14015

我想在字符串为G15001 G15005,G15015,PLU15010和搜索的子字符串为15时返回true,但在G14015或PLU14015时返回false,因为它们最后只有15。

3 个答案:

答案 0 :(得分:5)

使用Pos检查是否可以找到子字符串。然后检查子串是否位于末尾。

function ContainsBeforeEnd(const str, substr: string): Boolean;
var
  P: Integer;
begin
  P := Pos(substr, str);
  if P = 0 then
    // substr not found at all
    Result := False
  else
    // found, now check whether substr is at the end of str
    Result := P + Length(substr) - 1 <> Length(str);
end;

答案 1 :(得分:0)

这一个班轮应该能给你你想要的东西:

平面(SUBSTR,复制(STR,1,长度(STR)-1))大于0

大卫的解决方案更清洁,但只想做一个班轮。

答案 2 :(得分:0)

更多关于单行的建议:

function ContainsBeforeEnd(const str, substr: string): Boolean;
begin
  Result := not (Pos(subStr,Str) in [0,Length(str)-Length(subStr)+1]);
end;

function ContainsBeforeEnd(const str, substr: string): Boolean;
begin // Note, string helpers returns results based on zero based strings
  Result := (Length(str) > Length(subStr) and 
    (str.IndexOf(subStr) in [0..Length(str)-Length(subStr)-1]);
end;