C#TrimEnd修剪过多的字符

时间:2017-06-05 08:48:39

标签: c#

使用string.TrimEnd()方法时,我看到奇怪的结果

var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd("freshviprint01".ToCharArray());
Console.WriteLine(x);

制作

FDLBicester.

但是,稍微更改TrimEnd以包含.

var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd(".freshviprint01".ToCharArray());
Console.WriteLine(x);

可生产

FDLBic

????

为什么我还会通过修剪ester

来丢失.

4 个答案:

答案 0 :(得分:4)

TrimEnd()将修改所有传递给它的字符。

当你没有通过.修剪停在那里时,因为.不在要修剪的字符列表中。

传递.时, 在要修剪的字符列表中 - 以及之前的其他几个字符(即, estr),因此也会被修剪。

答案 1 :(得分:1)

TrimEnd修剪作为传递修剪数组一部分的末尾的每个字符,并重复此操作,直到字符串的最后一个字符不是数组的一部分。

var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd(".freshviprint01".ToCharArray());

cester.freshviprint01中的字符都是修剪数组的一部分,这就是它们被移除的原因。它们通过的顺序无关紧要。

var x = s.TrimEnd(".01efihnprstv".ToCharArray()); 

会有相同的结果。

答案 2 :(得分:1)

TrimEnd函数从字符串末尾删除任何char个。它与完整的字符串不匹配。

请改为尝试:

var s = "FDLBicester.freshviprint01";
var t = ".freshviprint01";

var x =
    s.Length > t.Length && s.Substring(s.Length - t.Length) == t
        ? s.Substring(0, s.Length - t.Length) 
        : s;

Console.WriteLine(x);

甚至这个:

var x = s.Split(new [] { t }, StringSplitOptions.None)[0];

答案 3 :(得分:1)

当你把

  var x = s.TrimEnd(".freshviprint01".ToCharArray());

您确实要从{'.', '0', '1', 'e', 'f', 'h', 'i', 'i', 'n', 'p', 'r', 'r', 's', 't', 'v'}设置中删除所有 结尾字符c第一个字符那个不是在集合中):

  "FDLBicester.freshviprint01" -> "FDLBic"

请注意,icester中的所有字符都在中显示,这就是裁剪的原因。您可能想要切断一些后缀,如下所示:

  var s = "FDLBicester.freshviprint01";
  var suffix = ".freshviprint01";

  var x = s.EndsWith(suffix) 
    ? s.Substring(0, s.Length - suffix.Length) 
    : s;