所谓字符过滤器,常常用在聊天的内容,比如一连串的骂人难听的话,我们要屏蔽掉,避免造成不好的东西!

当然我作为中华天朝一个有文明有素质的人,肯定偶尔会做这样的事情啦,特别是打LOL的时候,算了不讲了,都是泪啊。

我们来看看这款游戏字符过滤是怎么实现的,结合我上节讲到的单例类,因为字符过滤类当然是个单例类。

public class WordFilter : Singleton<WordFilter>{private string[] m_StringFilters;private Dictionary<int, string> m_Replacers = new Dictionary<int, string>();public void Init()//先从Init开始看{string fullPath = ResourceManager.GetFullPath("config/table/language_filter.txt", false);//这个是你要过滤的词汇,这个txt里面存的都是不好的stringthis.m_StringFilters = File.ReadAllLines(fullPath);//从txt中读取string存到m_StringFilters中for (int i = 0; i < this.m_StringFilters.Length; i++){string text = this.m_StringFilters[i].ToLower();this.m_StringFilters[i] = text;//都变成小写格式int length = text.Length;//单个string的长度string text2 = new string('*', length);//根据要过滤字符的长度构造等长的*字符串if (text2.Equals(text))//如果等于过滤的字符,那个这个就为空,其实就是用户不小心修改要过滤字符等于*,其实没必要{this.m_StringFilters[i] = null;}else{if (!this.m_Replacers.ContainsKey(length))//m_Replacers是个字典,key:length=>value:*,也就是多少长度的*字符串{this.m_Replacers.Add(length, text2);//如果不存在这个长度就加入}}}}public bool FilterString(ref string originalString)//这个是过滤的核心代码,之前是初始化,主要初始过滤字符数组和过滤*字典{string a = originalString;//你聊天的一句话(注意是一整句)string text = originalString.ToLower();//搞成小写string[] stringFilters = this.m_StringFilters;for (int i = 0; i < stringFilters.Length; i++){string text2 = stringFilters[i];if (!string.IsNullOrEmpty(text2))//不为空{int num = 0;while (true){num = text.IndexOf(text2, num);//从index=0开始,寻找text(也就是聊天的话)中第一个等于text2(也就是不好的string)的indexif (-1 == num)//也就是没找到就跳出循环{break;}string str = originalString.Substring(0, num);//截断聊天语句不好词的前面字符串string str2 = originalString.Substring(num + text2.Length);//截断聊天语句不好词后面的字符串,直到结束originalString = str + this.m_Replacers[text2.Length] + str2;//吧不好的词替换成*字符str = text.Substring(0, num);//为什么要改text呢,主要是为了跳出循环,当text不再含有不好词,num就为-1,然后breakstr2 = text.Substring(num + text2.Length);text = str + this.m_Replacers[text2.Length] + str2;}}}return a == originalString;//判断originalString是否改了,如果改了就说明过滤了,返回false,如果没改就返回true}}

  

所以,我们聊天的string都需要经过过滤字符类的方法FilterString处理。

因为FilterString的参数是ref 引用类型,所以只要有不好的词就会改变原来的聊天语句。

某游戏研究之字符过滤类-WorldFilter相关推荐

  1. XNA游戏开发之字符篇

    摘要: 游戏中开发不同于一般应用程序的开发,它更注重于界面美观,我们需要在游戏界面设计中花费大量的时间以便使它看起来更炫.更酷,当然这其中就少不了游戏中的字符文本,那么如何制作出漂亮的游戏文本呢?今天 ...

  2. 游戏编程之十三 3D类游戏

    视频课:[免费]跨平台APP JQuery Mobile开发-1-初探移动开发-张晨光的在线视频教程-CSDN程序员研修院 第一节 3D类游戏 设计3D光线投射游戏包括从高解析度图形到快速动画的许多技 ...

  3. 计算机 游戏化 论文,计算机程序设计类课程游戏化探究

    摘要:围绕教育信息化应用背景,在分析目前计算机程序设计类课程教学满意度现状的基础上,探究计算机程序设计类课程游戏化教学的影响因素.经调查分析得出,大部分学生都有学计算机程序设计类课程的经历和玩电脑游戏 ...

  4. 【转】深入研究java.lang.Class类

    深入研究java.lang.Class类            Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类 ...

  5. Java字符字符串类

    Java字符字符串类 Character 类 Character 类用于对单个字符进行操作.Character 类在对象中包装一个基本类型 char 的值在实际开发过程中,我们经常会遇到需要使用对象, ...

  6. php过滤非法字符函数,非法字符过滤_PHP教程

    非法字符过滤本文章主要是讲 php 过滤非法字符没讲asp过滤非法字符 的函数但是思想都一样的. ) 过滤影响MySQL正常运行的字符. 当需要把用户输入的内容(有可能包含单引号.双引号 .反斜线.空 ...

  7. 【转】【异常处理】Incorrect string value: ‘\xF0\x90\x8D\x83...‘ for column... Emoji表情字符过滤的Java实现

    [转][异常处理]Incorrect string value: '\xF0\x90\x8D\x83...' for column... Emoji表情字符过滤的Java实现 参考文章: (1)[转] ...

  8. 深入研究java.lang.Class类

    2019独角兽企业重金招聘Python工程师标准>>> 深入研究java.lang.Class类 博客分类: java Java程序在运行时,Java运行时系统一直对所有的对象进行所 ...

  9. android 过滤英文字符,Android编程之TextView的字符过滤功能分析

    本文实例分析了Android编程之TextView的字符过滤功能.分享给大家供大家参考,具体如下: TextView可以设置接受各式各样的字符,通过过滤指定的字符来满足不同应用的输入和显示要求. 通过 ...

最新文章

  1. BF法-字符模式匹配
  2. 【网页前端设计Front end】JavaScript教程.下(看不懂你来打我)
  3. 带你了解什么样的信息是陷阱或为勒索病毒在诱骗
  4. 深度学习开发者的AI Party来了!WAVE SUMMIT+2021与你相约双十二
  5. c语言数据类型_C语言基础数据类型
  6. Vue系列vue-router的参数传递的两种方式(五)
  7. 数据结构---function
  8. HDOJ 2199 HDU 2199 Can you solve this equation? ACM 2199 IN HDU
  9. 基于Spring Security的认证授权_方法授权_Spring Security OAuth2.0认证授权---springcloud工作笔记133
  10. 【SpringBoot 】 组件管理 + 属性注入
  11. Kubernetes学习之路(26)之kubeasz+ansible部署集群
  12. java语法有哪些_java编程基础语法都有哪些
  13. 2020低压电工模拟考试及低压电工复审模拟考试
  14. 那些年用过的机械键盘--游戏人生键盘风云#入坑keychron#
  15. 京东宙斯php,京东联盟API申请
  16. 2019年MongoDB中文社区 长沙大会
  17. 不懂这些法律问题,你的创业融资很危险
  18. 允许使用计算机的软件,解决win10“你的电脑设置仅允许安装来自应用商店的应用”的方法...
  19. Java栈的实现数组和链表
  20. 【前端】一、web技术基础

热门文章

  1. ACS Sustainable Chemistry Engineering期刊投稿分享
  2. 线上MySQL死锁分析——索引设置不当导致的死锁
  3. 电脑蓝屏怎么解决?几分钟解决蓝屏问题
  4. linux nmap命令
  5. 第四十五篇 信号上升时间的理解
  6. 腾讯Q+正式宣布开放下载 已上线超150款应用
  7. Windows如何成功下载scipy(包含numpy+mkl的安装下载和百度网盘资源)
  8. mysql排序后显示行数_让mysql的查询结果显示行号的方法
  9. font-style
  10. ROS和RRT的一些资料