如何从字符串末尾删除后缀?

leo*_*ora 39 c# string .net-3.5

我想要:

  1. 检查变量并确定最后2个字符是否为"Id"
  2. 如果是,请删除它们.

我可以用下面这个来做,但是如果除了结尾之外还有一个"Id"子串,它们会爆炸.是否有一个RemoveFromEnd()方法,它接受多个字符参数?

 if (column.EndsWith("Id"))
 {
       //remove last 2 characters
       column = column.replace("Id", "");
 }
Run Code Online (Sandbox Code Playgroud)

我看到了这个解决方案:这样做:

column = System.Text.RegularExpressions.Regex.Replace(column, "Id$", "");
Run Code Online (Sandbox Code Playgroud)

但它说它很慢,我将在一个代码块中运行这个代码,我希望它非常快,所以我想看看是否有更快的解决方案.

Jon*_*Jon 70

String.Substring 可以这样做:

column = column.Substring(0, column.Length - 2);
Run Code Online (Sandbox Code Playgroud)

你可以用它自己动手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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以修改为单行返回s.EndsWith(后缀)?s.Substring(0,s.Length - suffix.Length):s; (6认同)

jde*_*aan 12

SubString方法的替代方法是使用Regex.Replacefrom System.Text.RegularExpressions:

using System.Text.RegularExpressions;
...
column = Regex.Replace(column, @"Id$", String.Empty);
Run Code Online (Sandbox Code Playgroud)

这种方式使您可以避免测试,但不确定它是否真的是速度效益:-).至少在某些情况下可能有用的替代方案,在这种情况下,您需要一次检查多个事物.

正则表达式可以编译和重用,以获得一些性能提升,并使用而不是调用静态方法,可以像这样使用:

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


Far*_*den 5

好吧,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;
}
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式使用它:

column = column.RemoveFromEnd("Id");
Run Code Online (Sandbox Code Playgroud)