字串遮罩使用 Index 和 Range
- 2024-03-15
- 3954
- 0
之前上過 Bill 的C#新語法大作戰就一直覺得可以用 Index 加上 Range 搞點事,最近剛好遇到要做字串遮罩的需求,就想來練練手,沒想到殺雞用了牛刀啊。
需求說明
個資常見的需求,要把客戶的電話號碼作遮罩,只留下最後四碼,其餘使用符號*
替代,遮罩完的字串長度需要和原本的相同。
使用新方法
public static string ToMasked(this string rowString, int plainCodeCount)
{
if (string.IsNullOrEmpty(rowString))
{
return string.Empty;
}
if (rowString.Length < plainCodeCount)
{
return rowString;
}
var charArray = rowString.ToCharArray();
var lastString = string.Join("", charArray[^plainCodeCount..]);
return new string('*', charArray.Length - 4) + lastString;
}
為了要使用 range 所以我將字串拆成字元陣列再組回來,這段是我認為會影響效能的部分,所以寫完以後我又寫了一個傳統寫法
使用傳統方法
public static string MaskString(this string s, int plainCodeCount)
{
if (string.IsNullOrEmpty(s))
{
return string.Empty;
}
if (s.Length < plainCodeCount)
{
return s;
}
string lastStr = s.Substring(s.Length - plainCodeCount);
string masked = new string('*', s.Length - plainCodeCount) + lastStr;
return masked;
}
效能測試的部分我使用知名的套件 Benchmark 處理,以下就是結果
Index 加上 Range 的強項在這單純的需求看不出來,硬用反而讓效能變差,建議看看下方的參考連結後挑選適合的場景使用,千萬不要為了炫技亂來啊…
回應討論