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