为什么 C# 的 TrimEnd() 函数表现如下?

Why TrimEnd() function of C# behaves like following?

一个简单的代码片段如下:

public static void Main()
{
    string str = "IsRecorded<code>0</code>";
    str = str.TrimEnd("<code>0</code>".ToCharArray());
    Console.WriteLine(str);
}

我得到的输出字符串是IsRecor。为什么 TrimEnd 函数从字符串中剥离 ded,而它应该只剥离 <code>0</code>。另外,如果我将 str 减少到 IsRec,那么它会给出 IsR 作为输出。为什么会这样?

TrimEnd 的参数指定 字符集 为 trimmed。 后缀并不意味着trimmed.

所以你说你想 trim 集合 { '<', 'c', 'o', 'd', 'e', '>', '0', '/' } 中的任何字符。字母 "ded" 都在那个集合中,所以它们被 trimmed.

如果要删除后缀,请不要使用 TrimEnd。使用这样的东西:

public static string RemoveSuffix(string input, string suffix) =>
    input.EndsWith(suffix, StringComparison.Ordinal)
        ? input.Substring(0, input.Length - suffix.Length)
        : input;

(在某些情况下,字符串比较部分对于避免 "interesting" 特定于文化的影响很重要。它基本上会尽可能进行最简单的匹配。)

试试这个:

        string str = "IsRecorded<code>0</code>";
        str = str.Substring(0, str.IndexOf("<code>0</code>"));
        Console.WriteLine(str);

您可以使用.LastIndexOf() & Remove()删除末尾的字符串

string str = "IsRecorded<code>0</code>";
str = str.Remove(str.LastIndexOf("<code>0</code>"));

.LastIndexOf(string param) : This will find index of last occurrence of specified string.

.Remove(int startIndex) : Remove string from given index

另一种解决方案可能是:

string str = "IsRecorded<code>0</code>";
str = str.Replace("<code>0</code>", "");
Console.WriteLine(str);

PS:我知道不会trim只是结束部分,但如果这不是问题那么可以使用