c#text randomizer {variant1 | varian2 | ... variantN}

时间:2011-08-01 21:13:40

标签: c# .net

例如我有这样的文字 - “我想买{car | home | etc}”。是否有任何lib随机化文本?即制作3个字符串

我想买一辆车 我想买个房子 我想买一个等等

6 个答案:

答案 0 :(得分:7)

您可以在数组中预定义字符串,然后使用Random类生成随机整数。

var string[] data = new string[] {"car", "home", "etc"};
var rand = new Random();
var text = "I want to buy a " + data[rand.Next(data.Length)];

答案 1 :(得分:1)

首先,我认为你必须创建自己的单词词典

使用一些随机数发生器后,例如这个:Random Sentences and Paragraphs

修改

可能有很多其他类型的解决方案,所以请澄清您的问题以获得更正确的答案。

问候。

答案 2 :(得分:1)

我认为这是Regex.Replace的工作:

private void button1_Click(object sender, EventArgs e)
{
    string text = Regex.Replace(textBox1.Text, "{(.*?)}", PickRandomWord);
    ...
}

private Random random = new Random();
private string PickRandomWord(Match match)
{
    string[] words = match.Groups[1].Value.Split('|');
    return words[random.Next(words.Length)];
}

这将选择一个随机文本。

答案 3 :(得分:0)

public String CalculateRandomString(String input)
{
   String s = input.Substring(0, input.IndexOf('{'));
   String choiceString = input.Substring(input.IndexOf('{'), input.IndexOf('}'));
   String[] choices = choiceString.Split('|');
   Random rand = new Random();
   int choice = rand.Next(0, choices.Length);

   return s + choices[choice];
}

注意:

  • 仅在选项位于字符串末尾时才有效。

答案 4 :(得分:0)

//demonstration
index = string.indexOf('{');

if(index != -1)
{
   string.remove(0, index);

   endIndex = string.indexOf('}', index);

   if(endIndex != -1)
   {
      list = string.remove(endIndex, string.length - endIndex).split('|').toList();
      return list[rand.next(list.count)];
   }
}

如果你想要解析每个实例,那么在while循环中设置它,检查索引是否为-1并使用string.insert();

这是我为可旋转文本

所做的功能
        private string spinString(string s)
        {
            string  ret,
                    temp;

            string[] spinables;

            int index,
                i;

            Random a;


            a = new Random();
            ret = null;
            i = 0;

            while (true)
            {
                if (i == s.Length)
                    break;

                if (s[i] == '{')
                {
                    temp = s.Remove(0, i + 1);

                    index = temp.IndexOf('}');

                    if (index != -1)
                    {
                        temp = temp.Remove(index, temp.Length - index);

                        spinables = temp.Split('|');

                        temp = spinables[a.Next(spinables.Count())];

                        index = s.IndexOf('}', i);

                        if (index != -1)
                        {
                            s = s.Remove(i, index - i + 1);

                            s = s.Insert(i, temp);
                        }


                    }

                }

                try
                {
                    ret += s[i];
                }
                catch (Exception e)
                {
                    e.ToString();
                    break;
                }

                i++;
                Thread.Sleep(10);
            }


            return ret;
        }

答案 5 :(得分:0)

试试这个 -

String[] strings = {"car", "home", "boat"};
var output = "I want to buy a " + strings.OrderBy(en => System.Guid.NewGuid()).First();