String 是否有.NET函数删除字符串开头的第一个(且仅第一个)事件?
我使用TrimStart功能执行以下操作:String 是否有.NET函数删除字符串开头的第一个(且仅第一个)事件?,string,String,我使用TrimStart功能执行以下操作: var example = "Savings:Save 20% on this stuff"; example = example.TrimStart("Savings:".ToCharArray()); 我希望这个示例的值为“在这个东西上节省20%” 然而,我得到的是“这个东西的20%” 在阅读了关于TrimStart的文档后,我明白了原因,但现在我想知道.NET中是否有一个函数可以实现我最初尝试的功能 是否有人知道某个函数,这样我就不必创建自己的
var example = "Savings:Save 20% on this stuff";
example = example.TrimStart("Savings:".ToCharArray());
我希望这个示例的值为“在这个东西上节省20%”
然而,我得到的是“这个东西的20%”
在阅读了关于TrimStart的文档后,我明白了原因,但现在我想知道.NET中是否有一个函数可以实现我最初尝试的功能
是否有人知道某个函数,这样我就不必创建自己的函数并跟踪它?我认为不存在这样的方法,但您可以使用
StartsWith
和子字符串
轻松地执行它:
s = s.StartsWith(toRemove) ? s.Substring(toRemove.Length) : s;
您甚至可以将其添加为扩展方法:
public static class StringExtension
{
public static string RemoveFromStart(this string s, string toRemove)
{
if (s == null)
{
throw new ArgumentNullException("s");
}
if (toRemove == null)
{
throw new ArgumentNullException("toRemove");
}
if (!s.StartsWith(toRemove))
{
return s;
}
return s.Substring(toRemove.Length);
}
}
不,我不相信有任何东西可以在框架中实现这一点。这是一个有点不寻常的要求,国际海事组织
请注意,您应该仔细考虑是要删除“第一个匹配项”还是删除字符串开头的匹配项(如果有)。例如,想想你想用“Hello.Savings:节省20%的费用”来做什么。使用正则表达式可以很容易地做到这一点 删除字符串开头的引用:
example = Regex.Replace(example, @"^Savings:", "");
example = Regex.Replace(example, @"(?<!Savings:.*)Savings:", "");
删除字符串中的第一个匹配项:
example = Regex.Replace(example, @"^Savings:", "");
example = Regex.Replace(example, @"(?<!Savings:.*)Savings:", "");
example=Regex.Replace(示例@”(?说得好..我的意图只是在字符串的开头,实际上不是第一次出现。但是,只是第一次,不是重复。@Joseph:那样的话,马克的回答应该对你很好。我将把这个留在这里,让你明白一点。谢谢扩展。我试图避免编写自己的代码来做这件事,但我想这是徒劳的我个人喜欢使用条件运算符:返回s.StartsWith(toRemove)?s.Substring(toRemove.Length):s;
但我知道不是每个人都喜欢条件运算符:)这绝对是一种方法,清晰且易于验证正确性。这是我在生产代码中实际看到的一种可怕的邪恶替代方法(根据示例进行了修改):example.Split(新[]{“Savings:”},2,StringSplitOptions.RemoveEmptyEntries)[0]
。我不知道原作者在想什么……对我来说,这不像有一个额外的(简单的)选项那么简单方法。特别是,当您需要开始删除正则表达式中具有特殊意义的内容时,它会变得很复杂。@Jon,一点也不,请使用Regex.Escape()构建字符串
在要匹配的文本上,您很好。是的,但您必须记住这样做……我想很多人不会这么做。我认为Mark的解决方案简单得多。代码行更多,但更难出错。@Jon,我同意这一点。但是,与许多其他事情一样(例如LINQ的延迟执行),这始终是一个知道你在做什么才能把事情做好的问题。