2

私はこのような2つの文字列を持っています

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

s から t を削除したいと思います。こんなことしていいの?

s = s - t?

編集

2 つの文字列 s と t があり、t は s の末尾の部分文字列になります。s から t を削除したい。

4

3 に答える 3

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!
于 2013-03-30T02:08:19.447 に答える
3

このような:

if (s.EndsWith(t))
{
    s = s.Substring(0, s.LastIndexOf(t));
}
于 2013-03-30T02:13:44.043 に答える
2
s = s.Substring(0, s.Length - t.Length)

Substringstart と length の 2 つの引数を取ります。の先頭から取得したいabcdefのは index0であり、すべての文字から の文字を引いたものを取得しますt。これは、2 つの文字列の長さの差です。

これは、「t は s の終了部分文字列になる」という OP の契約を前提としています。実際、この前提条件が保証されていない場合は、それをif (s.EndsWith(t))回避する必要があります。

于 2013-03-30T02:12:19.080 に答える