簡體   English   中英

如何使用c#審查字符串中的前10個字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM