Spintax允许您旋转各种单词和句子,例如:
{Hello|Hi} {World|People}! {C{#|++|}|Java} is an {awesome|amazing} language.
大括号之间的文本将被随机选择以形成不同的句子。
我可能自己想出解决方案,但问题在于嵌套。有时嵌套可能非常深。如何处理嵌套可能是一个可能的解决方案?
我无法收集所需的逻辑。
Spintax允许您旋转各种单词和句子,例如:
{Hello|Hi} {World|People}! {C{#|++|}|Java} is an {awesome|amazing} language.
大括号之间的文本将被随机选择以形成不同的句子。
我可能自己想出解决方案,但问题在于嵌套。有时嵌套可能非常深。如何处理嵌套可能是一个可能的解决方案?
我无法收集所需的逻辑。
{C {# | ++ |} | Java}
之前要进行{# | ++ |}
。{
,}
或|
-这些都需要以某种方式进行转义,以使它们免受修改引擎的保护。using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static string spintax(Random rnd, string str) {
// Loop over string until all patterns exhausted.
string pattern = "{[^{}]*}";
Match m = Regex.Match(str, pattern);
while (m.Success) {
// Get random choice and replace pattern match.
string seg = str.Substring(m.Index + 1, m.Length - 2);
string[] choices = seg.Split('|');
str = str.Substring(0, m.Index) + choices[rnd.Next(choices.Length)] + str.Substring(m.Index + m.Length);
m = Regex.Match(str, pattern);
}
// Return the modified string.
return str;
}
static void Main(string[] args) {
Random rnd = new Random();
string str = "{Hello|Hi} {World|People}! {C{#|++|}|Java} is an {awesome|amazing} language.";
Console.WriteLine(spintax(rnd, str));
Console.ReadLine();
}
}
}
以下是一个示例运行的输出结果:
你好,世界!C# 是一门很棒的编程语言。
我倾向于创建一个递归方法来处理解析。编写一个方法,它接受一个字符串,扫描第一层大括号,并从其中选取随机选项。然后该方法将使用所选选项字符串调用自身,然后将其插入到最终结果中。