2013-03-30 86 views
2

我有兩個字符串這樣字符串「解除連接」

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

我想從s移除噸。我可以這樣做嗎?

s = s - t? 

編輯

我有兩個字符串s和t,T將S的結束串。我想從s中刪除t。

+0

不,這是行不通的。你想刪除的字符串總是「def」嗎?或者它是字符串的最後三個字母?那個後綴總是存在嗎? –

+0

我已更新我的問題。 –

+0

Decatenation *是一個[行話]字,但是..不適合紀律/用法。 – 2013-03-30 02:16:17

回答

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! 
+0

不,你看def可能會出現在字符串的其他地方。我只是想刪除字符串的結束部分。 –

+0

喬希是正確的:沒有內置的「字符串減法」。 「String.Replace()」可能是一個解決方案。 「String.LastIndexOf()」和「String.Substring()」的組合可能是您響應的合格要求的解決方案。使用[Regex](http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx)可能是另一種解決方案。你有很多選擇:) – paulsm4

+0

+1爲完整答案。另外,基於正則表達式的「sql注入」的演示是值得懷疑的:''foo「.ReplaceEnd(」..「)'不完全是人們所期望的:)。 –

2
s = s.Substring(0, s.Length - t.Length) 

Substring有兩個參數:開始和長度。你想從abcdef開始,那是索引0,並且你想從所有字符中減去t這兩個字符串長度的差異。

這假定OP的「t將是s的結束子字符串」的合約。如果實際上這個先決條件不能保證,那麼它需要圍繞它if (s.EndsWith(t))

+0

所以你說''abc123「 - 」def「'仍然會導致」abc「?????? – paulsm4

+0

@ paulsm4:我知道OP的「t將會是s的結尾子字符串」作爲合同,因此並不認爲有必要保護(即將在其他地方處理)。 – Amadan

+0

@pst:好點,編輯於。 – Amadan

3

像這樣:

if (s.EndsWith(t)) 
{ 
    s = s.Substring(0, s.LastIndexOf(t)); 
}