Как удалить суффикс из конца строки?
Я хочу:
- Проверьте переменную и определите, являются ли последние 2 символа "Id"
- Если да, удалите их.
Я могу сделать это с этим ниже, но они будут взорваться, если есть подстрока "Id", отличная от конца. Есть ли метод RemoveFromEnd(), который принимает несколько аргументов символов?
if (column.EndsWith("Id"))
{
//remove last 2 characters
column = column.replace("Id", "");
}
Я вижу это решение: что делает это:
column = System.Text.RegularExpressions.Regex.Replace(column, "Id$", "");
но он говорит, что он довольно медленный, и я собираюсь запустить этот код внутри блока кода, который я хотел бы быть очень быстрым, поэтому я хотел посмотреть, доступно ли более быстрое решение.
Ответы
Ответ 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", "");
Если его регистр нечувствителен и возникает только один раз, я все равно буду использовать первую проверку.