filename endswith c# string

c# - filename - ¿Cómo usar string.Endswith para probar múltiples finales?



endswith python (9)

Aunque un ejemplo simple como ese es probablemente lo suficientemente bueno usando || , también puedes usar Regex para ello:

if (Regex.IsMatch(mystring, @"[-+*/]$")) { ... }

Necesito verificar en string.Endswith("") de cualquiera de los siguientes operadores: +,-,*,/

Si tengo 20 operadores no quiero usar || Operador 19 veces.


Dada la completa falta de contexto, esta solución sería peor que usar un método fácil || operador sea de uso:

Boolean check = false; if (myString.EndsWith("+")) check = true; if (!check && myString.EndsWith("-")) check = true; if (!check && myString.EndsWith("/")) check = true; etc.


Es una expresión regex no una opción


Pruebe el último char de la cadena usando el String.IndexOfAny(Char[], Int32) (asumiendo que str es su variable):

str.IndexOfAny(new char[] {''+'', ''-'', ''*'', ''/''}, str.Length - 1)

Expresión completa:

str.Lenght > 0 ? str.IndexOfAny(new char[] {''+'', ''-'', ''*'', ''/''}, str.Length - 1) != -1 : false


Qué tal si:-

string input = .....; string[] matches = { ...... whatever ...... }; foreach (string match in matches) { if (input.EndsWith(match)) return true; }

Sé que es terriblemente viejo para evitar LINQ en este contexto, pero un día necesitarás leer este código. Estoy absolutamente seguro de que LINQ tiene sus usos (tal vez los encuentre un día) pero estoy bastante seguro de que no está destinado a reemplazar las cuatro líneas de código anteriores.


Si está utilizando .NET 3.5, entonces es bastante fácil con LINQ:

string test = "foo+"; string[] operators = { "+", "-", "*", "/" }; bool result = operators.Any(x => test.EndsWith(x));


Si realmente quieres, puedes usar las leyes de De Morgan para reemplazar x || y x || y en tu codigo Una versión dice:

!(x || y) == !x && !y

Si desea obtener el mismo resultado, solo necesitamos negar la expresión completa dos veces:

x || y == !!(x || y) == !(!x && !y)


Utilizando String.IndexOf(String) :

str.Lenght > 0 ? "+-*/".IndexOf(str[str.Lenght - 1]) != -1 : false


string s = "Hello World +"; string endChars = "+-*/";

Usando una función:

private bool EndsWithAny(string s, params char[] chars) { foreach (char c in chars) { if (s.EndsWith(c.ToString())) return true; } return false; } bool endsWithAny = EndsWithAny(s, endChars.ToCharArray()); //use an array bool endsWithAny = EndsWithAny(s, ''*'', ''/'', ''+'', ''-''); //or this syntax

Utilizando LINQ:

bool endsWithAny = endChars.Contains(s.Last());

Utilizando TrimEnd:

bool endsWithAny = s.TrimEnd(endChars.ToCharArray()).Length < s.Length; // als possible s.TrimEnd(endChars.ToCharArray()) != s;