字符串“de-concatenation”

时间:2013-03-30 02:06:11

标签: c# string

我有两个像这样的字符串

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

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

s = s - t?

修改

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

3 个答案:

答案 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))