功能簡述,
希望可設置必現關鍵詞,
及可選關鍵詞來自由組合。
比如設置“天氣”爲必現詞,“晴”,“陰”爲可選關鍵詞。當程序識別出
“天氣+晴”或“天氣+陰”或“天氣+晴+陰”,程序運行通過;如只出現“晴”,
或只出現“陰”或”出現“晴+陰”,則返回識別失敗;
在改之前是根據關鍵詞的數量來判斷是否通過的
這個例子是增加之前驗證用的,保留一下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ListStrTest
{
class Program
{
//功能簡述,
//希望可設置必現關鍵詞,
//及可選關鍵詞來自由組合。
//比如設置“天氣”爲必現詞,“晴”,“陰”爲可選關鍵詞。當程序識別出
//“天氣+晴”或“天氣+陰”或“天氣+晴+陰”,程序運行通過;如只出現“晴”,
//或只出現“陰”或”出現“晴+陰”,則返回識別失敗;
//在改之前是根據關鍵詞的數量來判斷是否通過的
//這個例子是增加之前驗證用的,保留一下。
/*
解決思路:用兩個List<string>數組來保存必須關鍵字和可選關鍵字,因爲這都是界面設置,可以得到的內容。
然後就是判斷邏輯處理,
第一種情況:果可選關鍵字爲空,那麼必須關鍵字裏的每一項都出現纔會通過。
第二種:如果有可選關鍵字,那麼只要可選和必須組合有一種出現,即通過。
*/
static void Main(string[] args)
{
string keyAnds = "你,我,他,和";
string keyOrs = "喫飯,睡覺";
string[] keyAndstrs = keyAnds.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);//必須關鍵字
List<string> keyAndList = new List<string>(keyAndstrs);
string[] keyOrstrs = keyOrs.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);//可選關鍵字
List<string> keyOrList = new List<string>(keyOrstrs);
string ret = "今天你氣預2w我報是喫cc飯特多他雲";
Console.WriteLine(CheckKeys(ret, keyAndList, keyOrList));
Console.ReadKey();
}
/// <summary>
/// 校驗關鍵字是否存在
/// </summary>
/// <param name="ret">需要驗證的文字</param>
/// <param name="keyAndList">必須關鍵字列表</param>
/// <param name="keyOrList">可選關鍵字列表</param>
/// <returns></returns>
private static bool CheckKeys(string ret, List<string> keyAndList, List<string> keyOrList)
{
int count = 0;//定義標誌
bool flag = false;//定義標誌
if (keyOrList.Count == 0)//這是可選爲空的邏輯
{
foreach (var item in keyAndList)//遍歷必須字。。。
{
if (ret.Contains(item))//和文本對比每一項。包含就加1.
{
count++;
}
}
if (keyAndList.Count != count)//如果不滿足全部情況,返回識別失敗
{
return false;
}
else
{
return true;
}
}
else
{
for (int i = 0; i < keyOrList.Count; i++)//有可選的情況
{
for (int j = 0; j < keyAndList.Count; j++)
{
if (ret.Contains(keyAndList[j]) && ret.Contains(keyOrList[i]))//出現任意組合就通過
{
flag = true;
}
}
}
}
return flag;
}
}
}
特意記錄一下,自己寫的校驗方法。以便以後查看