C#敏感词汇过滤(不是正则)

System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length);
  string filterText = "需要过滤的脏字 以|分开" ;
  //脏字 可根据自己的方式用分隔符
  string [] filterData = filterText.Split( '|' );
  foreach (var item in filterData)
  {
   char value = item[0];
   if (dicList.ContainsKey(value))
    dicList[value].Add(item);
   else
    dicList.Add(value, new List< string >() { item });
  }
  int count = text.Length;
  for ( int i = 0; i < count; i++)
  {
   char word = text[i];
   if (dicList.ContainsKey(word)) //如果在字典表中存在这个key
   {
    int num = 0; //是否找到匹配的关键字 1找到0未找到
    var data = dicList[word].OrderBy(g => g.Length);
    //把该key的字典集合按 字符数排序(方便下面从少往多截取字符串查找)
    foreach (var wordbook in data)
    {
     if (i + wordbook.Length <= count)
     //如果需截取的字符串的索引小于总长度 则执行截取
     {
      string result = text.Substring(i, wordbook.Length);
      //根据关键字长度往后截取相同的字符数进行比较
      if (result == wordbook)
      {
       num = 1;
       sb.Append(GetString(result));
       i = i + wordbook.Length - 1;
       //比较成功 同时改变i的索引
       break ;
      }
     }
    }
    if (num == 0)
     sb.Append(word);
   }
   else
    sb.Append(word);
  }
  return sb.ToString();
}
/// <summary>
/// 替换星号
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static string GetString( string value)
{
  string starNum = string .Empty;
  for ( int i = 0; i < value.Length; i++)
  {
   starNum += "*" ;
  }
  return starNum;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值