C# c文本随机化器{variant1 | varian2 |…variantN}
例如,我有这样的文本-我想买一辆{car | home | etc}。是否有随机文本库?也就是说,制作3个字符串 我想买一辆车 我想买一套房子C# c文本随机化器{variant1 | varian2 |…variantN},c#,.net,C#,.net,例如,我有这样的文本-我想买一辆{car | home | etc}。是否有随机文本库?也就是说,制作3个字符串 我想买一辆车 我想买一套房子 我想先买一本etc,我想你得自己编一本字典 使用一些随机化器后,例如此随机化器: 编辑 可能还有很多其他类型的解决方案,因此请澄清您的问题以获得更正确的答案 注意。您可以在数组中预定义字符串,然后使用类生成一个随机整数 注: 仅当选项位于字符串末尾时有效。 如果希望它解析每个实例,那么在while循环中设置它,检查索引是否为-1,并使用string.in
我想先买一本etc,我想你得自己编一本字典 使用一些随机化器后,例如此随机化器: 编辑 可能还有很多其他类型的解决方案,因此请澄清您的问题以获得更正确的答案
注意。您可以在数组中预定义字符串,然后使用类生成一个随机整数 注: 仅当选项位于字符串末尾时有效。 如果希望它解析每个实例,那么在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;
}
试试这个-
String[] strings = {"car", "home", "boat"};
var output = "I want to buy a " + strings.OrderBy(en => System.Guid.NewGuid()).First();
我认为这是Regex的工作。替换:
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)];
}
这将随机选择一个文本。您能澄清一下您的要求吗?您需要输出三个字符串,还是需要随机生成三个字符串中的一个?您不能将{text | between | delimiter}之间的文本拆分为一个数组吗。一旦你有了一个数组,你就可以使用c语言中的随机数发生器为你选择一个随机数了?我几乎想说的是,为这个句子定义一个数据结构,然后你就可以轻松地处理不同的场景。例如,我想买一辆{汽车|房子|等}但我想{节省|储蓄}{钱|餐车|美钞}。否则,为许多独特的场景尝试和操作字符串可能会成为一个主要的难题。行choice=rand.Next0,choices.Count应该是choice=rand.Next0,choices.Length;可以简化为choice=rand.Nextchoices.Length;那也可以做同样的事情。@pstrjds:谢谢。我不记得标准数组是使用计数还是长度。我似乎总是选错一个!为了可读性,我离开了起始边界,因为数组是基于零的.np,我总是这样做,混淆的是LINQ添加了一个计数方法,所以我想最好澄清一下:假设数组包含5个项,那么data.Length==5。数据[rand.Nextdata.Length]将在darn返回时导致IndexOutOfBoundsException异常。5将在0和N之间返回-1@sll-np,你让我再次检查文档,这是一件好事,我不想给出一个从数组末尾运行的损坏样本。这就是我要找的。谢谢
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;
}
String[] strings = {"car", "home", "boat"};
var output = "I want to buy a " + strings.OrderBy(en => System.Guid.NewGuid()).First();
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)];
}