功能简述,
希望可设置必现关键词,
及可选关键词来自由组合。
比如设置“天气”为必现词,“晴”,“阴”为可选关键词。当程序识别出
“天气+晴”或“天气+阴”或“天气+晴+阴”,程序运行通过;如只出现“晴”,
或只出现“阴”或”出现“晴+阴”,则返回识别失败;
在改之前是根据关键词的数量来判断是否通过的
这个例子是增加之前验证用的,保留一下。
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;
}
}
}
特意记录一下,自己写的校验方法。以便以后查看