我有一串用户可以输入的单词,我需要按照下面给出的顺序搜索特定单词,并根据所选单词采取行动。
例如,如果用户输入命令Card Stop
作为输入,那么我应首先处理单词Stop
而不是Card
。同样,如果用户输入Join Frank
,那么我应该处理单词Join
。同样,如果用户输入Stop Help
,那么我应该处理Stop
。
我该怎么做?
编辑:
我尝试了以下操作,但在这种情况下,需要搜索的有效单词集放在Enum中,然后循环遍历拆分文本。但在这种情况下,如果用户输入单词为"卡片停止"然后因为它是Enum中的正确命令之一,它只是发送卡的响应并跳过其余的。我理想的是它应该处理Stop而不是Card。基本上遵循上述优先顺序。 那可能吗?
var Tokens = Regex.Split(userText, @"\s+");
foreach (string stringText in Tokens)
{
if (Enum.IsDefined(typeof(TextType), stringText))
{
textType = (TextType)Enum.Parse(typeof(TextType), stringText, true);
if ((isTextTypeJoin(textType)))
{
return textType;
}
}
}
答案 0 :(得分:1)
这里的诱惑是首先通过用户输入循环,检查您的优先级'在循环中寻找的选项。唐'吨。遍历您所寻找的选项,为其中一个选项提供用户输入。
list <string> sought
list <string> inputs
答案 1 :(得分:1)
为了响应您的编辑,您需要将其翻转,以便循环浏览enum
,而不是通过输入:
foreach(var entry in Enum.GetNames(typeof(TextType)))
{
if (Regex.IsMatch(input, string.Format(@"\b{0}\b", Regex.Escape(entry))))
{
return entry;
}
}
return TextType.SomeDefaultValue;
input
是您的用户输入字符串。这将遍历枚举值并返回在字符串中找到的第一个值。
答案 2 :(得分:0)
编辑 - 我拿出了无关的答案 嘿,对不起这个愚蠢的回答,我开始在你的编辑之前打字。无论如何,我只是想到了一个非常优雅的解决方案,但它确实有效。
List<string> input = Console.ReadLine().Split(' ').ToList();
if(input.Any(x => x == "join")) Console.Write("JOIN");
if(input.Any(x => x == "stop")) Console.Write("STOP");
您的if语句将按优先顺序排列。如果您输入stop join
,则输出为JOIN STOP
。希望这是你正在寻找的。 p>
编辑2:
你说你的输入不是来自控制台,所以我认为你可以做类似的事情
List<string> input = Regex.Split(userText, @"\s+").ToList();
然后使用上面的答案。