[英]C# TrimEnd trimming too many chars
我在使用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
.
?
TrimEnd()
將修剪傳遞給它的所有字符。
當你沒有通過.
修剪從那里停止,因為.
不在要修剪的字符列表中。
當你通過.
,那么它是在字符修剪名單-等其他幾個字符之前(即, e
, s
, t
和r
它也因此被裁切。
當你放
var x = s.TrimEnd(".freshviprint01".ToCharArray());
你真的想刪除{'.', '0', '1', 'e', 'f', 'h', 'i', 'i', 'n', 'p', 'r', 'r', 's', 't', 'v'}
中的所有 尾隨字符 {'.', '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;
TrimEnd
修剪作為傳遞修剪數組一部分的末尾的每個字符,並重復此操作,直到字符串的最后一個字符不是數組的一部分。
var s = "FDLBicester.freshviprint01";
var x = s.TrimEnd(".freshviprint01".ToCharArray());
cester.freshviprint01
中的字符都是trim數組的一部分,這就是它們被刪除的原因。 它們通過的順序無關緊要。
var x = s.TrimEnd(".01efihnprstv".ToCharArray());
會有相同的結果。
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];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.