今天我慢下来啦,因为这三天没有新的课程学习内容,自己仅仅看啦一些,这让我停下来栖息片刻;说说现在的生活,简单的进行着,每天要奔波着去上课,然后回来,每天都在想怎样学习这个小知识点,大脑也在想怎样解决程序中的问题,每一天就是这样的开始,这样的结束;现在感觉:自己像一台电脑一样,难道被病毒入侵啦吗?但是这样的我仍然是快乐的,我因为兴趣而开始来习惯这样的生活的,所以一切的一切都是理所当然的,也是我已经预料到的,现在就是感觉有问题啦每次百度还是很难结局啊,不知道该怎么办,有点纠结,我的培训班的选择真的让我好失望啊,感觉社会是永远不会公平的,我们既然改变不了,就试着去接受吧。
下面就总结一下我今天学习的一些内容,今天学习啦一下怎样过滤敏感词的,由于之前我一个同学问我怎样去过滤文件中的敏感词,那时间做啦一下,但是做的结果不理想,现在就使用正则表达式来写一下啦。
一.敏感词的过滤
我们先创建一个窗体,然后在窗体上面拖拉两个控件,TextBox和Button,如下图所示:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } List<string> mod = new List<string>(); //需要审核的,在这里我们定义一个泛型集合存储 List<string> banned = new List<string>();//直接提示禁止使用的敏感词 private void Form1_Load(object sender, EventArgs e) { string[] lines = File.ReadAllLines(@"F:img过滤词.txt", Encoding.Default);//在这里我们读取文件中的敏感词存放在一个数组中 foreach (string line in lines) //遍历出来每一项 { Match match = Regex.Match(line, @"(.+)={(w+)}"); //在这里使用的是正则表达式进行匹配 if (match.Success) //在这里判断一下是否匹配成功 { string key = match.Groups[1].Value;//成功时间我们就把敏感词汇放在读出 string type = match.Groups[2].Value.ToLower(); //在这里是存储该敏感词的类型,是敏感词还是需要审核的词,要注意转换为小写,在这里容易出错的地方 if (type.Equals("mod")) { mod.Add(key); //在这里是如果是mod类型的那么我们就记录一下,当发生按钮单击事件时我们可以提示 } else if (type.Equals("banned")) { banned.Add(key); } } } } private void button1_Click(object sender, EventArgs e) { string context = this.textBox1.Text; #region 字符串判断是否包含敏感词 foreach (string key in banned) //在这里有一个先后顺序,我们应该先判断是否含有敏感词 { if (context.Contains(key)) //在这里需要注意的是:我们遍历出来的是key,一低昂判断的是是否包含key啦 { MessageBox.Show("此文章中含有敏感词,禁止发表"); return; } } foreach (string key in mod) //在这里有一个先后顺序,我们应该先判断是否含有敏感词 { if (context.Contains(key)) { MessageBox.Show("此文章中含有需要审核的词,我们需要审核"); return; } } #endregion #region 使用正则表达式判断 //在这里需要注意我们的实际情况,例如:我们拿“教瘦”这个敏感词来说,我们可能会在它中间加一个空格.下划线等符号,然后使用字符串判断就可以成功, //而现在我们需要的是在其中添加任意符号,我们都是它禁止发表文章的啦,所以我们可以使用正则表达式来判断的啦 //把集合中的关键词组合成 正则表达式 123|abc|aaa //string str = string.Join("|",banned.ToArray()); //if (Regex.IsMatch(context, str, RegexOptions.Singleline)) //在这里是注意IsMatch,而第三个参数为单行模式,是因为当这个敏感词之间有换行模式也可以判断其为敏感词的啦 //{ // MessageBox.Show("此文章中含有敏感词,禁止发表"); // return; //} //string strr = string.Join("|", mod.ToArray()); //if (Regex.IsMatch(context, strr, RegexOptions.Singleline)) //{ // MessageBox.Show("此文章中含有需要审核的词,我们需要审核"); // return; //} #endregion MessageBox.Show("发帖成功"); } }
在上面我们一般使用字符串判断比较方便,但是不是很严谨的啦。所以我们一定要注意使用正则表达式的做法和我们需要根据实际情况需要考虑的。在做上面时间我根本就没考虑到会出现好多的情况的啦,但是在看啦人家的做法后自己对比啦一下知道自己考虑的太少啦。
二.XML的简单创建
XML:可扩展的标记语言; 优点:容易读懂;格式标准任何语言都内置了XML分析引擎,不用单独进行文件分析引擎的编写;XML语法规范:标签要闭合,属性值要用""包围,标签可以互相嵌套;大小写敏感;XML和HTML的区别:XML中元素必须关闭!XML中元素的属性值必须用引号。
下面就简单的总结下在XML文件中创建XML文件和在调用方法创建XML文件啦。
1.XML文件中创建XML文件
<?xml version="1.0" encoding="utf-8" ?> <Books> <Book> <Name>c#图解教程</Name> <Price>10</Price> </Book> <Book> <Name>c#图解教程2</Name> <Price>20</Price> </Book> <Book> <Name>c#图解教程3</Name> <Price>30</Price> </Book> <Book> <Name>c#图解教程4</Name> <Price>20</Price> </Book> </Books>
在这里我们需要注意的是:第一行version="1.0"是版本号啦,而encoding="utf-8" 则是编码方式啦,而为什么在这里需要拿出来记忆一下那,主要是因为我们在使用类创建XML文件时,这个是要自己添加的啦,嘿嘿。
2.下面就总结一下使用方法创建XML文件啦。
static void Main(string[] args) { //实例化一下内存中的xml文件 XmlDocument xd = new XmlDocument(); if (File.Exists("XMLFile1")) { xd.Load("XMLFile1"); //加载文件 XmlElement books = xd.DocumentElement; //xml文档中的根节点,文件存在,找到根节点books,在他下面添加book节点 XmlElement book = xd.CreateElement("Book"); //book标签 books.AppendChild(book); XmlElement name = xd.CreateElement("Name"); name.InnerText = "c#图解教程"; book.AppendChild(name); XmlElement price = xd.CreateElement("Price"); price.InnerText = "10"; price.AppendChild(price); } else //当不包含文件的时间我们可以自己创建 { XmlDeclaration xmll = xd.CreateXmlDeclaration("1.0","utf-8",null); //创建文件的第一行,即版本号,编码方式 xd.AppendChild(xmll); XmlElement books = xd.CreateElement("Books"); //添加根节点 Books xd.AppendChild(books); //添加文档中 XmlElement book1 = xd.CreateElement("Book"); //添加book节点 第一本书 books.AppendChild(book1); XmlElement name1 = xd.CreateElement("Name"); //添加Name节点 name1.InnerText = "<b>c#图解教程</b>"; //InnerText 如果内容中有<> 会自动转义; //name1.InnerXml = "<b>c#图解教程</b>"; //InnerXml <>不转义 作为标签 book1.AppendChild(name1); XmlElement price1 = xd.CreateElement("Price"); //添加价格Price price1.InnerText = "10"; book1.AppendChild(price1); XmlElement book2 = xd.CreateElement("Book"); //添加book节点 第二本书 books.AppendChild(book2); XmlElement name2 = xd.CreateElement("Name"); //Name name2.InnerText = "c#图解教程2"; book2.AppendChild(name2); XmlElement price2 = xd.CreateElement("Price"); //Price price2.InnerText = "20"; book2.AppendChild(price2); XmlElement book3 = xd.CreateElement("Book"); book3.InnerXml = "<Name>c#图解教程3</Name><Price>30</Price>"; //而InnerXml可以字节添加多个标签 books.AppendChild(book3); } xd.Save("books.xml"); //保存文档 Console.ReadKey(); }
在学习这个敏感词过滤,感觉思想上面理解,但是还是没有很好地写出来啦,正则表达式也是我们的基础,虽然不常用吧,但是我看啦一个公共类库里面好像还是有使用正则表达式处理文件和图片的啦,所以我们还是必须要知道的啦,这些对于我来说,和前面学习的C#基础相比起来真的是有点进一步啦,这个需要我熟练地掌握啦,首先感觉处理敏感词这个以后也会用到的啦,所以感觉很有兴趣学习的啦。
而XML文件之前一直在迷茫,这是什么东东啦,感觉很难得感觉,那时间在项目中看到这个,都是好奇心啦,打开啦也没看懂他是干嘛的,那时间也没使用上它,所以百度都没有查看他的啦,现在好啦,终于知道啦,嘿嘿,感觉很高兴啦,突然发现知道啦一个新的知识点感觉不错啦,以后会多动手查看自己不知道的问题啦,而且要多练习的啦。
好啦,今天就总结到这里吧,其实刚开始心情有点沉重,这里每次停电,恐怖。。。而且上课去也没有老师。。。感觉很不好啦,不过现在还好啦,嘿嘿,有啦光明而且问题也解决啦。