使用选项生成随机字符串
本文关键字:随机 字符串 选项 | 更新日期: 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;
}