使用选项生成随机字符串

时间:2015-05-22 10:27:19

标签: c# .net string

您能告诉我是否有办法使用选项从另一个字符串创建一个字符串?

例如:

{嗨|你好|嘿嘿},你今天是怎么做的?

此字符串是使用这些值随机生成的字符串的基础。

所以它可以是:

你好,今天好吗?嗨,你好吗?或任何变种。

有一种简单的方法吗?

初始字符串不是“固定”的主要内容,因此它可以是任何{... | ..}值的字符串,可以在任何地方找到这个字符串。

3 个答案:

答案 0 :(得分:9)

可能是这样的:

  private static Random gen = new Random();

  ...
  String source = "{Hi|Hello|Hey}, how are you {today|doing}?";

  String result = Regex.Replace(source, @"\{(\w|\|)*\}", (MatchEvaluator) (
    (match) => {
       var items = match.Value.Trim('{','}').Split('|');

       return items[gen.Next(items.Length)];
     }));

答案 1 :(得分:0)

您需要编写自己的解析引擎,但是 - 这是相对简单的。

这是一个相当天真的实现,可以帮助您入门:

public string ParseRandomOptionsString(string input)
{
    var random = new Random();
    var output = string.Empty;
    var currentOption = string.Empty;
    var currentOptions = new List<string>();
    var optionsStarted = false;

    foreach (var c in input)
    {
        if (optionsStarted)
        {
            if (c == '}')
            {
                optionsStarted = false;
                if (!string.IsNullOrEmpty(currentOption))
                    currentOptions.Add(currentOption);

                output += currentOptions[random.Next(currentOptions.Count)];
                currentOptions.Clear();
                currentOption = null;
            }
            else if (c == '|')
            {
                if (!string.IsNullOrEmpty(currentOption))
                    currentOptions.Add(currentOption);

                currentOption = null;
            }
            else
            {
                currentOption += c;
            }
        }
        else
        {
            if (c == '{')
            {
                optionsStarted = true;
            }
            else
            {
                output += c;
            }
        }
    }

    return output;
}

答案 2 :(得分:0)

Dmitry Bychenko给出的答案是最好的,但如果您不想使用Regex, 在java您可以使用以下代码 -

public static void main(String s[]) {
        System.out.println(meth());
            }
public static String meth(){
     String source = "{Hi|Hello|Hey}, how are you {today|doing}?";
     List<String> list1=new ArrayList<String>();
     List<String> list2=new ArrayList<String>();
     String[] strg=source.split("\\{");
     for(String str: strg){
         if(str.contains("}")){
         String[] data=str.split("\\}");
         list1.add(data[0]);
         list2.add(data[1]);
     }
     }
     Random random = new Random();
     String[] req=new String[list1.size()];
     int i=0;
     for(String str: list1){
         req[i++]= str.split("\\|")[random.nextInt(str.split("\\|").length)];
     }
     int j=0;
     String result="";
     for(String str: list2){
         result=result+req[j++]+str;
     }
     return result;
 }