我想:
我可以用下面这个来做,但是如果除了结尾之外还有一个“Id”子串,它们会爆炸。是否有一个RemoveFromEnd()方法,它接受多个字符参数?
if (column.EndsWith("Id"))
{
//remove last 2 characters
column = column.replace("Id", "");
}
我看到this solution:这样做:
column = System.Text.RegularExpressions.Regex.Replace(column, "Id$", "");
但它说它很慢,我将在代码块中运行此代码,我希望速度非常快,所以我想看看是否有更快的解决方案。
答案 0 :(得分:64)
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;
}
}
答案 1 :(得分:9)
SubString
方法的替代方法是使用Regex.Replace
中的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);
答案 2 :(得分:4)
由于您知道要移除的部件的长度,因此您可以使用Substring
:
if (column.EndsWith("Id"))
{
column = column.Substring(0, column.Length - 2);
}
答案 3 :(得分:3)
嗯,如果您自己编写,可以使用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");
答案 4 :(得分:1)
试试这个:
if (column.IndexOf("Id") == column.Length-2) {
column = column.Substring(0, column.Length-2);
}
答案 5 :(得分:0)
要添加到@ Jon的答案中的几个注释:
你想不敏感地做这个案子吗?
if (column.ToLower().EndsWith("id")) { column = column.Remove(column.Length - 2); }
如果ID在字符串中是唯一的,则需要始终删除...
#No if check....
column = column.Replace("Id", "");
如果它不区分大小写并且只在我仍然使用第一次检查时发生。