在字符串中查找最后一次出现的char

Del*_*bie 27 delphi string delphi-2007

是否存在任何RTL Delphi函数来确定字符串中最后一次出现char的位置?

RRU*_*RUZ 29

尝试作为LastDelimiterSysUtils单元一部分的功能.

  • 当您需要字符串而不是字符时,System.SysUtils.TStringHelper.LastIndexOf 也很方便。 (2认同)

And*_*and 18

RRUZ回答了实际问题(他给你一个RTL功能).

尽管如此,我还是不能完全拒绝提供一个简单的代码片段,它可以满足您的需求:

function LastCharPos(const S: string; const Chr: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := length(S) downto 1 do
    if S[i] = Chr then
      Exit(i);
end;
Run Code Online (Sandbox Code Playgroud)

由于这完全符合您的要求并且不提供其他功能,因此它更加紧凑(特别是当我们使用Exit(Result)Delphi 2009及更高版本的语法时)并且可能稍快一些.但是,在Delphi 2007中,您必须这样做

function LastCharPos(const S: string; const Chr: char): integer;
var
  i: Integer;
begin
  result := 0;
  for i := length(S) downto 1 do
    if S[i] = Chr then
    begin
      result := i;
      break; // or Exit; if you prefer that
    end;
end;
Run Code Online (Sandbox Code Playgroud)

  • 为什么我同时给出的每个答案都是低估的?! (4认同)

Rob*_*edy 11

SysUtils单元中使用StrRScan或.后者,尽管它的名字,适用于在Delphi版本,其中Unicode字符是.(如果您仍需要"真正的"Ansi版本,请使用AnsiStrings单元.)AnsiStrRScanstringUnicodeString

这些功能搜索的一个字符,而LastDelimiter对于任何从可能性的列表给出几个字符的搜索-认为StrRScan作为LastDelimiter一个一个字符的优化Delimiters参数.