我有兩個字符串這樣字符串「解除連接」
string s = "abcdef";
string t = "def";
我想從s移除噸。我可以這樣做嗎?
s = s - t?
編輯
我有兩個字符串s和t,T將S的結束串。我想從s中刪除t。
我有兩個字符串這樣字符串「解除連接」
string s = "abcdef";
string t = "def";
我想從s移除噸。我可以這樣做嗎?
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!
不,你看def可能會出現在字符串的其他地方。我只是想刪除字符串的結束部分。 –
喬希是正確的:沒有內置的「字符串減法」。 「String.Replace()」可能是一個解決方案。 「String.LastIndexOf()」和「String.Substring()」的組合可能是您響應的合格要求的解決方案。使用[Regex](http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx)可能是另一種解決方案。你有很多選擇:) – paulsm4
+1爲完整答案。另外,基於正則表達式的「sql注入」的演示是值得懷疑的:''foo「.ReplaceEnd(」..「)'不完全是人們所期望的:)。 –
s = s.Substring(0, s.Length - t.Length)
Substring
有兩個參數:開始和長度。你想從abcdef
開始,那是索引0
,並且你想從所有字符中減去t
這兩個字符串長度的差異。
這假定OP的「t將是s的結束子字符串」的合約。如果實際上這個先決條件不能保證,那麼它需要圍繞它if (s.EndsWith(t))
。
像這樣:
if (s.EndsWith(t))
{
s = s.Substring(0, s.LastIndexOf(t));
}
不,這是行不通的。你想刪除的字符串總是「def」嗎?或者它是字符串的最後三個字母?那個後綴總是存在嗎? –
我已更新我的問題。 –
Decatenation *是一個[行話]字,但是..不適合紀律/用法。 – 2013-03-30 02:16:17