用一系列随机生成的数字替换字符串

时间:2015-05-13 20:33:54

标签: c# random numbers

我正在尝试创建一个擦洗程序,我有点困在我必须生成一组随机数来替换一串数字,而我可以得到一次随机数,我不能似乎弄清楚如何使它替换整个九个字符串。

public static int GetRandomNumber()
        {
            Random rnd = new Random();
            // creates a number between 0 and 9
            int ranNum = rnd.Next(10);
            return ranNum;
        }

我知道它与检查字符串长度并重复直到它替换整个字符串有关,但我不能在我的生活中记住如何和谷歌搜索有点太不具体。字符串本身是从文本文件中提取的,并已拆分为数组。

public static string[] ScrubData(string line)
        {
            string[] words = line.Split('|');
            replaceData(words);
            MessageBox.Show(words[0] + words[2]);
            return words;
        }

        private static void replaceData(string[] words)
        {

            words[0] = Convert.ToString(GetRandomNumber());            
        }

我知道有人已经问过类似的问题,但我不知道“锁定”是什么,或者如何将他们的问题与我的问题联系起来。

2 个答案:

答案 0 :(得分:0)

不确定我是否完全理解,但听起来你想要一个返回一串与输入字符串长度相同的随机数的方法?如果是这样,这应该有效:

private static Random _rnd = new Random();

public static string ReplaceCharactersWithRandomNumbers(string input)
{
    if (input == null) return null;

    var newString = new StringBuilder();

    for (int i = 0; i < input.Length; i++)
    {
        newString.Append(_rnd.Next(10));
    }

    return newString.ToString();
}

更新

我修改了代码以初始化方法外的Random。这将确保每次调用时都有唯一的数字。如果在方法中初始化了对象,则每次调用它时都可以获得相同的值,并且每次都会生成相同的数字。

如果你想变得棘手,可以采用单行方式:

private static readonly Random Rnd = new Random();

public static string ReplaceCharactersWithRandomNumbers(string input)
{
    return input == null ? null : string.Join("", input.Select(c => Rnd.Next(10)));
}

答案 1 :(得分:-1)

您需要枚举字符串并重建整个字符串。看起来你的输入字符串是一组用tee(&#34; |&#34;)标记分隔的标记。我使用StringBuilder,因为在.NET中连接很多字符串很慢。

试试这个...或类似的东西:

    public static string ScrubData(string line)
    {
        string[] words = line.Split('|');
        System.Text.StringBuilder sb = new StringBuilder();
        for (int i = 0; i < words.Length; i++)
        {
            sb.Append(GetRandomNumber().ToString());
            if (i + 1 < words.Length)
                sb.Append("|");
        }
        return sb.ToString();
    }