Подтвердить что ты не робот

Как удалить суффикс из конца строки?

Я хочу:

  • Проверьте переменную и определите, являются ли последние 2 символа "Id"
  • Если да, удалите их.

Я могу сделать это с этим ниже, но они будут взорваться, если есть подстрока "Id", отличная от конца. Есть ли метод RemoveFromEnd(), который принимает несколько аргументов символов?

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

Я вижу это решение: что делает это:

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

но он говорит, что он довольно медленный, и я собираюсь запустить этот код внутри блока кода, который я хотел бы быть очень быстрым, поэтому я хотел посмотреть, доступно ли более быстрое решение.

4b9b3361

Ответ 1

String.Substring может сделать это:

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

Вы можете использовать его, чтобы катить свой 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;
    }
}

Ответ 2

Альтернативой методу SubString является использование Regex.Replace from System.Text.RegularExpressions:

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

Этот способ позволяет избежать теста, но не уверен, действительно ли это преимущество скорости:-). По крайней мере, альтернатива, которая может быть полезна в некоторых случаях, когда вам нужно проверять несколько штук одновременно.

Регулярное выражение может быть скомпилировано и повторно использовано для увеличения производительности и использования вместо вызова статического метода и может быть использовано следующим образом:

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

Ответ 3

Поскольку вы знаете длину удаляемой части, вы можете использовать Substring:

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

Ответ 4

Ну, может быть метод RemoveFromEnd(), если вы напишете свой собственный:

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

Вы можете просто использовать его следующим образом:

column = column.RemoveFromEnd("Id");

Ответ 5

Попробуйте следующее:

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

Ответ 6

Несколько примечаний, чтобы добавить к @Jon ответ:

Вы хотите сделать этот случай незаметно?

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

Если идентификатор уникален в строке и его нужно всегда удалять...

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

Если его регистр нечувствителен и возникает только один раз, я все равно буду использовать первую проверку.