簡體   English   中英

搜索給定字符串中的單詞

[英]Search for a word in a given string of words

我有一串用戶可以輸入的單詞,我需要按照下面給出的順序搜索特定單詞,並根據所選單詞采取行動。

  • 加入,是的
  • 停止,
  • 取消
  • 救命
  • 帳戶

例如,如果用戶輸入命令Card Stop作為輸入,那么我應該首先處理單詞Stop而不是Card 同樣,如果用戶輸入Join Frank那么我應該處理單詞Join 同樣,如果用戶輸入Stop Help那么我應該處理Stop

我該怎么做呢?

編輯

我嘗試了下面這個但是在這種情況下需要搜索的有效單詞集放在一個枚舉中,我循環遍歷拆分文本。 但是在這種情況下,如果用戶輸入單詞作為“卡片停止”,那么由於它是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;
                    }
                }
            }

這里的誘惑是首先通過用戶輸入循環,檢查循環中正在尋找的“優先”選項。 別。 遍歷您所尋找的選項,為其中一個選項提供用戶輸入。

  • 將搜索到的單詞拆分為list <string> sought
  • 將輸入單詞拆分為list <string> inputs
  • foreach string尋求尋求
    • 如果inputs.contains(尋求)
      • 采取行動尋求
      • (聽起來你想要打破循環並根據你的例子停止處理,但你的開頭句意味着你應該繼續循環。)

為了響應您的編輯,您需要翻轉它以便循環通過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> 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:

你說你的輸入不是來自控制台,所以我認為你可以做一些像List<string> input = Regex.Split(userText, @"\\s+").ToList(); 然后使用上面的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM