比如论坛:我要发表一篇新话题,但是我发表的这篇话题中带有一些脏字,所以我想在存入数据库的时候把其中带有某个脏字的字词用“***”替换的,其余的就原封不动的存入数据库。这个怎么实现呢?有没有这方面的代码? 我现在是这样做的,在启动服务器的时候就初始化一个类,这个类从数据库中取出所有需要过滤掉的字词,然后把它放入一个HASHMAP中,以键做为K,需要替换掉的东西设为V,当发表一篇主题时,将此主题与此HASHMAP中的每个K做比较,如果找到,就将此字词替换掉,此过程中有拆字符串与合并字符串的动作,因此我觉得这样会影响性能,所以想问问大家有没有一种效率更好的思路呢?
String str = ""; // 原文
StringBuilder b = new StringBuilder(str);
while (true) {
len = str.indexOf("脏字");
if (len == -1)
break;
b.replace(len, len + "脏字".length(), "***");
}本质就是
1 用StringBuilder 代替 String
2 用replace来减少字符串操作
从性能的角度考虑:
1、正则表达式。
2、尽量在客户端用javascript先过滤。虽然服务器端的过滤从可靠性上考虑不能省,但客户端的过滤会大大降低服务器的负荷。
另外,将“脏话”一次性写死的方法应该优化为可以动态添加的“自适应”方案。