【问题标题】:how to censor the first 10 char in a string using c#如何使用 c# 审查字符串中的前 10 个字符
【发布时间】:2019-12-01 06:54:09
【问题描述】:

所以我想创建一个信用卡编码器(如果这甚至是一个单词),它接受一个字符串并将字符串的前 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

我做错了什么?

【问题讨论】:

  • String.Substring 可能更容易,然后将剩下的内容添加到new string('*');
  • 为什么不用子字符串进行简单的连接? return "******" + str.Substring(10);
  • @AleksAndreev 我需要这种格式的代码,因为您从函数调用者那里获取的缺少参数作为 cencor 字符串长度存在更多重载
  • 你为什么返回string[]
  • 我觉得你应该把str.Length-1改成str.Length

标签: c# arrays linq lambda char


【解决方案1】:

把它改成更简单的东西怎么样:

var result = string.Concat(Enumerable.Repeat("*", 10)) + str.Substring(10);

【讨论】:

【解决方案2】:

我会使用String.Substringstring constructor 这个更高效的版本:

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);
}

【讨论】:

    【解决方案3】:

    我建议您使用原始数组进行迭代,以便您可以利用它的索引来创建掩码。 String.Join() 可以帮助您生成屏蔽输出。代码是这样的:

    string maskedInput = String.Join("", str.Select((c, index) => index < 10? '*' : c));
    

    这是一个working example 供您参考

    【讨论】:

      【解决方案4】:

      您的代码无法编译。所以我不知道你是怎么联系到ArgumentNullException的。

      这不是您使用 LINQ 的方式。实现您的想法的正确方法(虽然不是一个好方法,因为上面的答案显然要好得多)

      array = array.Select((cha, index) =>
      {
          if (index < 10)
              return array[index];
          else
              return str[index];
      }).ToArray(); 
      

      【讨论】:

      • 我在编译时到达了它
      • 是的,我对 LINQ 还是很陌生
      【解决方案5】:

      $"{string.Concat(Enumerable.Repeat("*", 10))}{FIELD.Substring(10)}";

      【讨论】:

        猜你喜欢
        • 2011-11-03
        • 2011-07-08
        • 2013-11-07
        • 2013-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多