2017-06-05 46 views
1

我使用string.TrimEnd時看到奇怪的結果()方法C#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

+2

這裏閱讀 - 備註 https://msdn.microsoft.com/en-us/library/system.string.trimend(v=vs .1px).aspx – pitersmx

+0

它按照doc的規定工作,檢查由@pitersmx – bradbury9

回答

4

TrimEnd()將削減傳遞給它的所有的字符。

當您沒有通過.時,修剪停止在那裏,因爲.不在要修剪的字符列表中。

當你通過.,則是字符的列表削減 - 等其他幾個字符之前(即estr),因此這也得到修剪。

+0

提供的鏈接換句話說''aaabbbb.b「.TrimEnd(」。b「.ToCharArray())'將導致'aaa '因爲'b'是用'.b'來代替的。您應該使用Substring而不是TrimEnd – bradbury9

1

TrimEnd修剪作爲傳遞修剪數組一部分的末尾的每個字符,並重復此操作,直到字符串的最後一個字符不是數組的一部分。

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

cester.freshviprint01的字符是微調陣列的一部分,這就是爲什麼他們得到消除。不要緊,在順序將它們傳遞。

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

將會有相同的結果。

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]; 
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;