使用选项生成随机字符串

本文关键字:随机 字符串 选项 | 更新日期: 2023-09-27 17:50:20

你能告诉我是否有一种方法来创建一个字符串从另一个使用选项?

例如:

{Hi|Hello|Hey},你{今天}过得怎么样?

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

所以可以是:

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

有简单的方法吗?

最主要的是初始字符串不是"固定的",所以它可以是任何带有任何{..|..的字符串。

使用选项生成随机字符串

可以是这样的:

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

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

这里有一个相当简单的实现让你开始:

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

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