我有两个像这样的字符串
string s = "abcdef";
string t = "def";
我想从s中删除t。我可以这样做吗?
s = s - t?
修改
我将有两个字符串s和t,t将是s的结束子字符串。我想从s中删除t。
答案 0 :(得分:8)
不,但你可以这样做:
var newStr = "abcdef".Replace("def", "");
根据您的评论,如果您只想删除尾随模式,可以使用Regex:
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!
答案 1 :(得分:3)
像这样:
if (s.EndsWith(t))
{
s = s.Substring(0, s.LastIndexOf(t));
}
答案 2 :(得分:2)
s = s.Substring(0, s.Length - t.Length)
Substring
有两个参数:start和length。你想从abcdef
开始,那是索引0
,你想要取所有字符减去t
中的字符,这是两者的长度差异字符串。
这假设OP的契约“t将是s的结束子串”。如果实际上这个先决条件得不到保证,那么它需要if (s.EndsWith(t))
。