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