visual sufijo prefijos prefijo colocar celdas agregar c# string .net-3.5

c# - prefijos - ¿Cómo eliminar un sufijo del final de la cadena?



sufijo celdas excel (6)

Quiero:

  1. Verifique una variable y determine si los últimos 2 caracteres son "Id"
  2. Si es así, eliminarlos.

Puedo hacerlo con esto a continuación, pero les explotará si hay una subcadena "Id" distinta del final. ¿Hay un método RemoveFromEnd () que tome un argumento de varios caracteres?

if (column.EndsWith("Id")) { //remove last 2 characters column = column.replace("Id", ""); }

Veo esta solución : que hace esto:

column = System.Text.RegularExpressions.Regex.Replace(column, "Id$", "");

pero dice que es bastante lento y que voy a ejecutar este código dentro de un bloque de código que me gustaría ser extremadamente rápido, así que quería ver si hay una solución más rápida disponible.


Bueno, puede haber un método RemoveFromEnd() si escribes el tuyo:

public static string RemoveFromEnd(this string str, string toRemove) { if (str.EndsWith(toRemove)) return str.Substring(0, str.Length - toRemove.Length); else return str; }

Puedes usarlo de la siguiente manera:

column = column.RemoveFromEnd("Id");


Como conoce la longitud de la pieza que va a eliminar, puede usar la Substring :

if (column.EndsWith("Id")) { column = column.Substring(0, column.Length - 2); }


Prueba esto:

if (column.IndexOf("Id") == column.Length-2) { column = column.Substring(0, column.Length-2); }


Un par de notas para agregar a la respuesta de @ Jon:

¿Quieres hacer este caso insensiblemente?

if (column.ToLower().EndsWith("id")) { column = column.Remove(column.Length - 2); }

Si ID es único en la cadena y necesita ser eliminado siempre ...

#No if check.... column = column.Replace("Id", "");

Si su caso no es sensible y solo ocurre una vez, aún así usaría el primer cheque.


Una alternativa al método SubString es usar un Regex.Replace desde System.Text.RegularExpressions :

using System.Text.RegularExpressions; ... column = Regex.Replace(column, @"Id$", String.Empty);

De esta forma, puede evitar la prueba, pero no está seguro si realmente es un beneficio de velocidad :-). Al menos una alternativa que podría ser útil en algunos casos donde necesita verificar más de una cosa a la vez.

La expresión regular puede compilarse y reutilizarse para obtener un aumento en el rendimiento y utilizarse en lugar de la llamada al método estático y se puede usar así:

// stored as a private member private static Regex _checkId = new Regex(@"Id$", RegexOptions.Compiled); ... // inside some method column = _checkId.Replace(column, String.Empty);


String.Substring puede hacer eso:

column = column.Substring(0, column.Length - 2);

Puede usarlo para lanzar su propio RemoveFromEnd :

public static string RemoveFromEnd(this string s, string suffix) { if (s.EndsWith(suffix)) { return s.Substring(0, s.Length - suffix.Length); } else { return s; } }