在给定的单词串中搜索单词
本文关键字:搜索 单词 单词串 | 更新日期: 2023-09-27 18:00:54
我有一个字符串,用户可以输入,我需要按照下面给出的顺序搜索特定的单词,并根据所选单词采取行动。
- 加入,是
- 停止
- 取消
- 帮助
- 账户
- 卡片
例如,如果用户输入命令Card Stop
作为输入,那么我应该首先处理单词Stop
而不是Card
。类似地,如果用户输入Join Frank
,那么我应该处理单词Join
。类似地,如果用户输入Stop Help
,那么我应该处理Stop
。
我该怎么做?
编辑:
我尝试了以下操作,但在这种情况下,需要搜索的一组有效单词被放在Enum中,然后我在拆分的文本中循环。但在这种情况下,如果用户输入单词"Card Stop",那么由于它是Enum中正确的命令之一,它只需发送Card的响应并跳过其余部分。我最理想的情况是,它应该处理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;
}
}
}
为了响应您的编辑,您需要翻转它,以便循环通过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
是用户输入字符串。这将循环遍历枚举值,并返回在字符串中找到的第一个值。
这里的诱惑是首先循环用户输入,检查在循环中寻找的"优先"选项。不要。循环浏览您所寻找的选项,获取其中一个选项的用户输入。
- 将查找到的单词拆分为
list <string> sought
- 将输入的单词拆分为
list <string> inputs
- foreach字符串在搜索中搜索
- if inputs.contains(seek(
- 对seek采取行动
- (根据你的例子,听起来你想跳出循环,停止这里的处理,但你的第一句暗示你应该继续循环。(
- if inputs.contains(seek(
编辑-我去掉了不相关的答案
嘿,对不起,我在你编辑之前就开始打字了。不管怎样,我只是想到了一个非常不优雅的解决方案,但它确实有效。
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
。希望这就是你想要的。
编辑2:
你说你的输入不是来自控制台,所以我想你可以做一些类似的事情CCD_ 14,然后使用上面的答案。