web-dev-qa-db-fra.com

Trouvez la dernière occurrence de Char dans une chaîne

Existe-t-il une fonction RTL Delphi pour déterminer la position de la dernière occurrence d'un caractère dans une chaîne?

29
DelphiNewbie

essayez le LastDelimiter Fonction qui fait partie de l'unité Sysutils.

27
RRUZ

Utilisez StrRScan ou AnsiStrRScan , à la fois dans le Sysutils Unité. Ce dernier, malgré son nom, fonctionne sur des caractères Unicode dans les versions Delphes où string est UnicodeString. (Si vous avez toujours besoin de la version "réelle" ANSI, utilisez le Anstring Unité.)

Ces fonctions recherchent exactement un caractère, alors que LastDelimiter recherche l'un de plusieurs caractères à partir de la liste de possibilités donnée - pense à StrRScan comme LastDelimiter optimisé pour un personnage Delimiters argument.

11
Rob Kennedy

La meilleure solution croisée est Tstringhelper.lastindexof , il existe depuis Delphi XE4.

Notez que cette fonction est basée sur 0.

3
vladon

Et voici ma contribution pour trouver la position de la nième occurrence d'une sous-chaîne dans une chaîne.

function GetPositionOfNthOccurence(sSubStr, sStr: string; iNth: integer): integer;
var
  sTempStr: string;
  iIteration: integer;
  iTempPos: integer;
  iTempResult: integer;
begin
  result := 0;

  // validate input parameters
  if ((iNth < 1) or (sSubStr = '') or (sStr = '')) then exit;

  // evaluate
  iIteration := 0;
  iTempResult := 0;
  sTempStr := sStr;
  while (iIteration < iNth) do
  begin
    iTempPos := Pos(sSubStr, sTempStr);
    if (iTempPos = 0) then exit;
    iTempResult := iTempResult + iTempPos;
    sTempStr := Copy(sStr, iTempResult + 1, Length(sStr) - iTempResult);
    inc(iIteration);
  end;
  result := iTempResult;
end;
1
Sam