C#敏感词过滤实现方法
作者:喻家军 发布时间:2022-11-28 12:00:31
标签:C#,过滤
本文实例讲述了C#敏感词过滤实现方法。分享给大家供大家参考。具体如下:
这两天突然想到了敏感词过滤 就结合网上找到的资料自己写了一个,脏字数量700+(效率不是很高 测试在110多KB的情况下比replace快 3-4倍)
测试结果图 单位:秒
代码如下:
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;
}
还有待优化的地方
各位有更好的方法还请分享指点一下,说明原理
希望本文所述对大家的C#程序设计有所帮助。


猜你喜欢
- 在idea中将创建的java web项目部署到Tomcat中采用的工具idea 2018.3.6 Tomcat71.先创建第一个新项目sec
- 目录1、一个抽象类并不需要其中所有的方法都是抽象的。( )2、下列程序的运行结果3、在Java中,关于HashMap类的描述,以下错误的是(
- 日志过滤对于一个网站日志,首先要对它进行过滤,删除一些不必要的信息,我们通过scala语言来实现,清洗代码如下,代码要通过别的软件打包为ja
- 1.基本介绍代码块又称为初始化块,属于类中的成员(类的一部分),类似于方法,讲逻辑语句封装在方法体中,用{}抱起来;但和方法不同,没有方法名
- Java8 HashMap键与Comparable接口最容易使 HashMap 发生哈希冲突的方法是什么呢?我们可以创建一个类,让它的哈希函
- 函数InternetGetConnectedState返回本地系统的网络连接状态。语法:BOOL InternetGetConnectedS
- 先吐槽一下,现在的Bean Searcher操作手册的指引弱的可怜…对我这样的小白及其不友好话不多说直入主题1、首先肯
- 实现思路制作一个用户头像选择器仿 WeGame制作一个用户头像选择Canvas为父控件所实现,展示图片使用Image,Path当作
- 本文实例为大家分享了Android实现随手指移动小球的具体代码,供大家参考,具体内容如下这个随手指移动小球,首先要使用paint画笔在can
- Android webview旋转屏幕导致页面重新加载问题解决办法1. 在create时候加个状态判断protected void onCr
- 这篇文章主要介绍了mybatis insert返回主键代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。为了解决这样的问题,spring Boot 为我们提供了一个
- 一、什么是桥接模式桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又
- using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using
- 批量修改代码如下<update id="UPDATE_HOTEL_REAL_TIME_PRICE" paramet
- 谷歌有专门的SDK来完成VR,我这次以一个全景图片的例子来说一下这个SDK实现VR的基本过程,首先全景图片就是百度地图里的那样,能够看到周围
- AOP注解无效,切面不执行的解决想做一个api请求日志,想到使用aop,配置过程中遇到了一个坑,aop不起作用,我的aop是这样的:pack
- 前面两篇文章,分别简述了多线程的使用和发展历程,但是使用多线程无法避免的一个问题就是多线程安全。那什么是多线程安全?如何解决多线程安全?本文
- 一. 多维数组1. 概念多维数组可以看成是数组的数组。 比如二维数组就是一个特殊的一维数组,它的每个元素都是一个一维数组。其他多维数组的概念
- 介绍一款简洁实用的图片编辑器,纯dart开发。支持:涂鸦、旋转&翻转、马赛克、添加文字,及自定义ui风格。功能演示涂鸦旋转&