¿Existe alguna función RTL Delphi para determinar la posición de la última aparición de un carácter en una cadena?Encuentra la última aparición de caracteres en una cadena
Respuesta
prueba la función LastDelimiter
que es parte de la unidad SysUtils.
RRUZ respondió la pregunta real (le dio una función RTL).
Sin embargo, yo no puedo resistirse a dar un simple fragmento de código que hace lo que quiere:
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;
Dado que esto hace exactamente lo que quiere y no ofrecen otras características, es mucho más compacto (especialmente cuando utilice la sintaxis Exit(Result)
de Delphi 2009 y posterior) y probablemente un poco más rápido. En Delphi 2007, sin embargo, usted tiene que hacer
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;
¿Por qué cada respuesta que doy downvoted al mismo tiempo? –
+1 fuera de simpatía :) – Funk247
Uso StrRScan
o AnsiStrRScan
, tanto en los SysUtils unidad. Este último, a pesar de su nombre, funciona en caracteres Unicode en las versiones de Delphi donde string
es UnicodeString
. (Si aún necesita la versión "real" ANSI, utilizar los AnsiStrings unidad.)
Buscar en estas funciones a un único carácter, mientras que LastDelimiter
búsquedas de cualquiera de los diversos caracteres de la lista dada de posibilidades - piensa en StrRScan
como LastDelimiter
optimizado para un argumento de un carácter Delimiters
.
+1. Realmente debería aprender estas funciones tipo C algún día ... –
Y aquí está mi contribución para encontrar la posición de la enésima aparición de una subcadena dentro de una cadena.
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;
muy bueno, porque con este código también es posible determinar la cantidad de ocurrencias de una subcadena en una cadena. ¡Esto me solucionó un problema ahora! gracias por tu contribución. – Saulo
La mejor solución multiplataforma es TStringHelper.LastIndexOf, que existe desde Delphi XE4.
Tenga en cuenta que esta función está basada en 0.
- 1. Reemplazar la última aparición de caracteres en la cadena
- 2. PHP eliminar caracteres después de la última aparición de un caracter en una cadena
- 3. Cómo reemplazar última aparición de caracteres de una cadena usando javascript
- 4. Eliminar cadena después de la última aparición de un carácter
- 5. rreplace - ¿Cómo reemplazar la última aparición de una expresión en una cadena?
- 6. ¿Cómo reemplazar la última aparición de una subcadena en ruby?
- 7. eliminar todo antes de la última aparición de un caracter
- 8. Encuentra ocurrencias de caracteres en una cadena de Java
- 9. Opcionalmente utilizando String.split(), divida una cadena en la última aparición de un delimitador
- 10. ¿Cómo encontrar la última aparición de un número en una cadena usando Ruby?
- 11. Buscar el índice de última aparición de una subcadena en una cadena
- 12. Conseguir una subcadena después de la última aparición de un caracter en XSLT
- 13. ¿Cómo puedo dividir una cadena Perl solo en la última aparición del separador?
- 14. Encuentra la posición de la primera aparición de cualquier número en cadena (php)
- 15. JPA encuentra la última entrada
- 16. Perl buscar y reemplazar la última ocurrencia de caracteres
- 17. Cortar una cadena en la n. ° aparición de un carácter
- 18. Reemplazar toda la aparición de una cadena en un elemento
- 19. función de cadena PHP para obtener subcadena antes de la última aparición de un caracter
- 20. ¿Obtiene el índice de la enésima aparición de una cadena?
- 21. ¿Se elimina la primera aparición de palabra de una cadena?
- 22. ¿Reemplazar la primera aparición solamente de una cadena?
- 23. Buscar el índice de la última aparición de una subcadena utilizando T-SQL
- 24. Reemplazar una sola aparición de la cadena Obj-c
- 25. Regex para que coincida con la primera aparición de una cadena
- 26. ¿Cómo puedo encontrar la primera y la última aparición de un elemento en un data.frame?
- 27. dividir en la última aparición de dígitos, tomar la 2da parte
- 28. ¿Cómo encontrar nth aparición de carácter en una cadena?
- 29. ¿Cómo encuentro la última aparición de una subcadena en un NSString?
- 30. cadena transversal C: obtenga la última palabra de una cadena
System.SysUtils.TStringHelper.LastIndexOf también podría ser útil cuando desee una cadena en lugar de un carácter. – Ampere