2

我有两个这样的字符串

string s = "abcdef";
string t = "def";

我想从 s 中删除 t。我可以这样做吗?

s = s - t?

编辑

我将有两个字符串 s 和 t,t 将是 s 的结束子字符串。我想从 s 中删除 t。

4

3 回答 3

8

不,但你可以这样做:

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!
于 2013-03-30T02:08:19.447 回答
3

Like this:

if (s.EndsWith(t))
{
    s = s.Substring(0, s.LastIndexOf(t));
}
于 2013-03-30T02:13:44.043 回答
2
s = s.Substring(0, s.Length - t.Length)

Substring有两个参数:开始和长度。您想从 的开头取东西abcdef,即 index 0,并且您想取所有字符减去 from 的字符t,这是两个字符串的长度差。

This assumes the OP's contract of "t will be an ending substring of s". If in fact this precondition is not guaranteed, it needs if (s.EndsWith(t)) around it.

于 2013-03-30T02:12:19.080 回答