在给定的单词串中搜索单词

本文关键字:搜索 单词 单词串 | 更新日期: 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采取行动
      • (根据你的例子,听起来你想跳出循环,停止这里的处理,但你的第一句暗示你应该继续循环。(

编辑-我去掉了不相关的答案
嘿,对不起,我在你编辑之前就开始打字了。不管怎样,我只是想到了一个非常不优雅的解决方案,但它确实有效。

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,然后使用上面的答案。