[英]how to censor the first 10 char in a string using c#
所以我想創建一個信用卡編碼器(如果這個甚至是一個單詞),它接受一個字符串並將字符串的前10位數字設為'*'
這是我提出的代碼:
public static string[] ToCencoredString(this string str)
{
char[] array = Enumerable.Repeat('*', str.Length-1).ToArray();
array = array.Select((cha, index) =>
{
if (index < 10)
array[index] = str[index];
});
}
(忽略函數返回string[]
的事實,代碼的另一部分是不相關的)
我不知道為什么,但我一直得到ArgumentNullException
這是奇怪的,因為array
沒有一個值為null
。
我究竟做錯了什么?
如何將它更改為更簡單的東西:
var result = string.Concat(Enumerable.Repeat("*", 10)) + str.Substring(10);
我使用String.Substring
和字符串構造函數使用這個更高效的版本:
public static string ToCencoredString(this string str, int length = 10)
{
if (String.IsNullOrEmpty(str)) return str;
string censored = new string('*', length);
if (str.Length <= length) return censored;
return censored + str.Substring(length);
}
我建議你使用原始數組進行迭代,這樣你就可以利用它的索引來創建掩碼。 String.Join()
可以幫助您生成屏蔽輸出。 代碼將是這樣的:
string maskedInput = String.Join("", str.Select((c, index) => index < 10? '*' : c));
這是一個工作示例供您參考
您的代碼無法編譯。 所以我不知道你是如何設法達到ArgumentNullException
。
這不是你如何使用LINQ。 正確的方法(雖然不是一個好方法,因為上面的答案顯然更好),以實現你的想法
array = array.Select((cha, index) =>
{
if (index < 10)
return array[index];
else
return str[index];
}).ToArray();
$“{string.Concat(Enumerable.Repeat(”*“,10))} {FIELD.Substring(10)}”;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.