No hay función incorporada en C#, pero puede escribir sus propias extensiones que se comporten exactamente de la manera esperada.
Tenga en cuenta que con IndexOf/LastIndexOf, puede elegir si es sensible a las mayúsculas/minúsculas o no.
Implementé también la función "ajustes repetitivos".
Hay una función TrimStr(..)
tratar con ambos ajustes, además de tres funciones de ejecución .TrimStart(...)
, .TrimEnd(...)
y .Trim(..)
para la compatibilidad con .NET recorta:
Try it in DotNetFiddle
public static class Extension
{
public static string TrimStr(this string str, string trimStr,
bool trimEnd = true, bool repeatTrim = true,
StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
{
int strLen;
do
{
if (!(str ?? "").EndsWith(trimStr)) return str;
strLen = str.Length;
{
if (trimEnd)
{
var pos = str.LastIndexOf(trimStr, comparisonType);
if ((!(pos >= 0)) || (!(str.Length - trimStr.Length == pos))) break;
str = str.Substring(0, pos);
}
else
{
var pos = str.IndexOf(trimStr, comparisonType);
if (!(pos == 0)) break;
str = str.Substring(trimStr.Length, str.Length - trimStr.Length);
}
}
} while (repeatTrim && strLen > str.Length);
return str;
}
// the following is C#6 syntax, if you're not using C#6 yet
// replace "=> ..." by { return ... }
public static string TrimEnd(this string str, string trimStr,
bool repeatTrim = true,
StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
=> TrimStr(str, trimStr, true, repeatTrim, comparisonType);
public static string TrimStart(this string str, string trimStr,
bool repeatTrim = true,
StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
=> TrimStr(str, trimStr, false, repeatTrim, comparisonType);
public static string Trim(this string str, string trimStr, bool repeatTrim = true,
StringComparison comparisonType = StringComparison.OrdinalIgnoreCase)
=> str.TrimStart(trimStr, repeatTrim, comparisonType)
.TrimEnd(trimStr, repeatTrim, comparisonType);
}
Ahora sólo se puede utilizar es como
Console.WriteLine("Sammy".TrimEnd("my"));
Console.WriteLine("moinmoin gibts gips? gips gibts moin".TrimStart("moin", false));
Console.WriteLine("moinmoin gibts gips? gips gibts moin".Trim("moin").Trim());
que crea la salida
Sam
gibts moin de yeso? gips gibts moin
gibts gips? gips gibts
Tu pregunta no es muy clara. ¿Qué debería hacer exactamente el parámetro de cadena en una función de recorte? (Suponiendo que no se está refiriendo a la sintaxis obligatoria de 'esta cadena' del método de extensión) – asawyer
Así que quiere dos funciones con la misma funcionalidad que TrimStart/TrimEnd | ¿O quieres uno que quite los caracteres de entrada del principio/final? – Blam
Sí, la misma funcionalidad que TrimStart y TrimEnd, pero acepta una cadena en lugar de una char. –