解决方案 »
- 界面文化问题请教。
- C#读取数据库中的某一段时间的数据出错。。。
- 如何获取短日期类型!
- 怎样将PDF格式转换为图片格式或tif格式
- C#如何实现文本文件到xml之间的转换
- 有谁告诉我 reflector(打开DLL文件的软件) 这软件怎么用呀,我一进这个软件里面就一头雾水
- 神奇(是我疯了,还是.net)
- readerline一行后,如何分割成数组??
- 如何序列化->压缩->加密 一个datatable 然后 解密->解压缩->反序列化?如分不够再开新贴送
- 单位上用的是微软的exchangeserver作为邮件服务器,请问,如何编写程序,自动发送邮件啊?
- 求助:美版系统里Visualstudio的默认字体在屏幕显示问题
- Treeview 添加节点问题
比如:var str = "xxxxx";
Hashtable ht =new Hashtable();
foreach(char c in str){
if (ht[c]==null)ht[c]=0;
((int)ht[c])++;
}
if (str.length / ht.Count > 10) //10是一个阀值,可以设定
error("您在灌水");
比如我想举个例子,所以需要用到大量的重复字符,比如abcd1abcd2abcd3abcd4abcd5
难道这样就是灌水了?
而如果我是随手乱敲进去,比如林地简欧风精灵交流立即分裂昂罗经理阿德里妇女file昂立
一个重复字符都没有,但是内容毫无意义
static void Main(string[] args)
{
var samples = new string[]{
"贵阳,一个夏天度假的好地方。那地方我确实去过,山好水好空气好,确实值得大家去玩一玩",
"你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷",
"sssssssssssssssssssssssssssssssssssss",
"................放屁放屁....……………操操操操…....................."
};
foreach(var item in samples)
{
var rate = GetDuplicatedRate(item);
Console.Write("样本:");
Console.WriteLine(item);
Console.WriteLine("duplicatedRate = {0:00.00%}", rate);
Console.WriteLine();
}
} static float GetDuplicatedRate(string input)
{
var length = input.Length; //假定重复次数超过 字符串长度/3 就算恶意重复
var minDuplicateRefer = length >> 3; var duplicated = input.GroupBy(ch => ch)
.Select(g => new
{
Char = g.Key,
Count = g.Count()
})
.Where(ch => ch.Count > minDuplicateRefer)
.Sum(ch => ch.Count); var duplicatedRate = (float)duplicated / length; return duplicatedRate;
}
计算结果:
样本:贵阳,一个夏天度假的好地方。那地方我确实去过,山好水好空气好,确实值得大家去玩一玩
duplicatedRate = 00.00%样本:你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷你大爷
duplicatedRate = 100.00%样本:sssssssssssssssssssssssssssssssssssss
duplicatedRate = 100.00%样本:................放屁放屁....……………操操操操….....................
duplicatedRate = 74.55%
var minDuplicateRefer = length >> 3;
var minDuplicateRefer = length >= 24 ? length >> 3 : 3;
var array = abc.ToCharArray(); foreach (char item in array.Distinct())
{
var count = array.Count(s => s.CompareTo(item) == 1);
Console.WriteLine(string.Format("{0}:{1}", item, count));
}
Console.Read();