C#中的随机文本遮罩

时间:2019-02-09 09:15:43

标签: c#

在C#中掩盖5个字母的单词中的3个随机字母的最佳方法是什么? 例如,如果输入字符串为“ 12345”,那么我需要将其转换为以下输出之一。 “ 12 ***”或“ 1 * 3 **”或“ 1 4 *”或“ * 23 ”或“ * 2 * 4 *”或“ * 2 ** 5”或“ ** 34 *”或“ ** 3 * 5”或“ *** 45”

谢谢!

2 个答案:

答案 0 :(得分:2)

虽然我喜欢Mehrdad的方法,但那里似乎存在缺陷。由于订购后选择了索引,因此似乎总是具有相同的结果。受到同样的启发,你可以做下面的事情

Random rnd = new Random();
var inputString = "ABCDE";
var resultBuilder = new StringBuilder();
var randomIndices = Enumerable.Range(0,inputString.Length)
                              .OrderBy(x=>rnd.Next())
                              .Take(2)
                              .ToList();

for(int i=0;i<inputString.Length;i++)
{
    resultBuilder.Append(randomIndices.Contains(i) ? '*':inputString[i]);
}
var result = resultBuilder.ToString();

在不同的通话中输出样本

**C*E
A*C**
**CD*

答案 1 :(得分:0)

您可以使用随机排序,例如前3个,然后可以将*分配给随机选择的Ids

Random rnd = new Random();
var s = "12345";
var result = s.ToArray();
var randomIds= Enumerable.Range(0, s.Length).OrderBy(x => rnd.Next()).Take(3);
foreach (var id in randomIds)
  {
     result[id] = '*';
  }
var stringResult = String.Join("", result);

一个输出:

"***45"