您能告诉我是否有办法使用选项从另一个字符串创建一个字符串?
例如:
{嗨|你好|嘿嘿},你今天是怎么做的?
此字符串是使用这些值随机生成的字符串的基础。
所以它可以是:
你好,今天好吗?或嗨,你好吗?或任何变种。
有一种简单的方法吗?
初始字符串不是“固定”的主要内容,因此它可以是任何{... | ..}值的字符串,可以在任何地方找到这个字符串。
答案 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;
}