繁体   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