Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “字符串”;“去串联”;_C#_String - Fatal编程技术网

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));
}