【问题标题】:Replacing string with a series of randomly generated numbers [duplicate]用一系列随机生成的数字替换字符串[重复]
【发布时间】:2015-05-13 20:33:54
【问题描述】:

我正在尝试创建一个清理程序,但我遇到了一个问题,我必须生成一组随机数来替换一串数字,虽然我可以获得一次随机数,但我不能似乎想出如何让它替换整个九个字符串。

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

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

【问题讨论】:

    标签: c# random numbers


    【解决方案1】:

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

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

    【讨论】:

    • 啊,谢谢你们,出于某种原因,我完全忽略了 (int i = 0; i
    • StringBuilder 是一种更有效的字符串连接方式(使用.Append),但newString 的类型可以更改为string,然后在@ 的正文中987654328@你可以做newString += rnd.Next(10).ToString();
    • 还有一点需要注意的是,Random 的创建确实应该在这个方法之外。如果你用相同的字符串快速连续地调用这个方法,它们都会以相同的随机字符结束。我会更新答案以反映更好的方法。
    【解决方案2】:

    您需要枚举字符串并重建整个字符串。看起来您的输入字符串是一组用 tee ("|") 标记分隔的标记。我使用 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();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2015-08-16
      • 2014-02-05
      相关资源
      最近更新 更多