为什么C#的TrimEnd()函数的行为如下所示?

时间:2019-04-23 12:42:10

标签: c# string trim texttrimming

一个简单的代码段如下:

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作为输出。为什么会这样呢?

4 个答案:

答案 0 :(得分:6)

TrimEnd的参数指定要修剪的字符集。并非要修剪后缀

因此,您要修剪{ '<', 'c', 'o', 'd', 'e', '>', '0', '/' }中的任何字符。字母“ ded”都在该集合中,因此已被修剪。

如果要删除后缀,请不要使用TrimEnd。使用类似这样的内容:

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

(字符串比较部分对于避免在某些情况下“引起有趣的”文化特定效果非常重要。它基本上会进行最简单的匹配。)

答案 1 :(得分:1)

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

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

.LastIndexOf(string param):这将找到最后一次出现的索引   指定的字符串。

     

.Remove(int startIndex):从给定索引中删除字符串

答案 2 :(得分:0)

尝试以下方法:

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

答案 3 :(得分:0)

另一个解决方案可能是:

for d in data:
    author, title, date = d['author'], d['title'], d['year']
    print( f'{author} wrote "{title}" in {year}') 

PS:我知道不会只修剪末端部分,但是如果这不是问题,那么可以使用