私はこのような2つの文字列を持っています
string s = "abcdef";
string t = "def";
s から t を削除したいと思います。こんなことしていいの?
s = s - t?
編集
2 つの文字列 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!
このような:
if (s.EndsWith(t))
{
s = s.Substring(0, s.LastIndexOf(t));
}
s = s.Substring(0, s.Length - t.Length)
Substring
start と length の 2 つの引数を取ります。の先頭から取得したいabcdef
のは index0
であり、すべての文字から の文字を引いたものを取得しますt
。これは、2 つの文字列の長さの差です。
これは、「t は s の終了部分文字列になる」という OP の契約を前提としています。実際、この前提条件が保証されていない場合は、それをif (s.EndsWith(t))
回避する必要があります。