C# “字符串”;“去串联”;
我有两条像这样的线C# “字符串”;“去串联”;,c#,string,C#,String,我有两条像这样的线 string s = "abcdef"; string t = "def"; 我想从s中删除t。我可以这样做吗 s = s - t? 编辑 我将有两个字符串s和t,t将是s的结束子字符串。我想从s中删除t。否,但您可以这样做: var newStr = "abcdef".Replace("def", ""); 根据您的注释,如果您只想删除尾随模式,可以使用正则表达式: var newStr = Regex.Replace("defdefdef", "(def)$", "
string s = "abcdef";
string t = "def";
我想从s中删除t。我可以这样做吗
s = s - t?
编辑
我将有两个字符串s和t,t将是s的结束子字符串。我想从s中删除t。否,但您可以这样做:
var newStr = "abcdef".Replace("def", "");
根据您的注释,如果您只想删除尾随模式,可以使用正则表达式:
var newStr = Regex.Replace("defdefdef", "(def)$", "");
“$”将锚定到字符串的末尾,因此它只会删除最后的“def”
将此转换为扩展方法:
public static String ReplaceEnd(this string input, string subStr, string replace = "")
{
//Per Alexei Levenkov's comments, the string should
// be escaped in order to avoid accidental injection
// of special characters into the Regex pattern
var escaped = Regex.Escape(subStr);
var pattern = String.Format("({0})$", escaped);
return Regex.Replace(input, pattern, replace);
}
在上面的代码中使用此方法将成为:
string s = "abcdef";
string t = "def";
s = s.ReplaceEnd(t); // Ta Da!
Substring
接受两个参数:start和length。您希望从abcdef
的开始处获取内容,即索引0
,并希望获取所有字符减去t
中的字符,这是两个字符串长度的差值
这假设OP的合同“t将是s的结束子字符串”。如果事实上这个前提条件没有得到保证,那么它需要在它周围加上If(s.EndsWith(t))。像这样:
if (s.EndsWith(t))
{
s = s.Substring(0, s.LastIndexOf(t));
}
不,您可以看到def可能出现在字符串的其他位置。我只是想删除字符串的结尾部分。Josh是正确的:没有内置的“字符串减法”。“String.Replace()”可能是一种解决方案。“String.LastIndexOf()和“String.Substring()”的组合可能是您响应的限定需求的解决方案。使用a可能是另一种解决方案。你有很多选择:)+1获得完整答案。此外,基于正则表达式的“sql注入”演示的价值也值得怀疑:
“foo.ReplaceEnd(“…”
)并不是人们所期望的:)。我没有对sql使用“sql注入”,而是“在查询语言中执行查询时使用错误的转义数据”。。。显然用词不当。。。将很快删除这两条注释。@AlexeiLevenkov-我现在明白你的意思了,有人可能传入一个字符串,该字符串将由正则表达式解析器解释,因此会产生意外的结果。我已经更新了答案以纳入你的反馈。不,那不行。要删除的字符串是否始终为“def”?还是字符串的最后三个字母?那个后缀会一直存在吗?我已经更新了我的问题。Decatenation是一个[行话]词,但是。。不适当的纪律/用法。@paulsm4:我理解OP的“t将是s的结束子字符串”是一份合同,因此不认为需要一名警卫(即,它将在其他地方处理)。
if (s.EndsWith(t))
{
s = s.Substring(0, s.LastIndexOf(t));
}