比如论坛:我要发表一篇新话题,但是我发表的这篇话题中带有一些脏字,所以我想在存入数据库的时候把其中带有某个脏字的字词用“***”替换的,其余的就原封不动的存入数据库。这个怎么实现呢?有没有这方面的代码?    我现在是这样做的,在启动服务器的时候就初始化一个类,这个类从数据库中取出所有需要过滤掉的字词,然后把它放入一个HASHMAP中,以键做为K,需要替换掉的东西设为V,当发表一篇主题时,将此主题与此HASHMAP中的每个K做比较,如果找到,就将此字词替换掉,此过程中有拆字符串与合并字符串的动作,因此我觉得这样会影响性能,所以想问问大家有没有一种效率更好的思路呢?

解决方案 »

  1.   

    此过程中有拆字符串与合并字符串的动作如果你考虑性能问题,我想你可以参考下面的思路
        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来减少字符串操作
      

  2.   

    方法应该就是这个思路了。
    从性能的角度考虑:
    1、正则表达式。
    2、尽量在客户端用javascript先过滤。虽然服务器端的过滤从可靠性上考虑不能省,但客户端的过滤会大大降低服务器的负荷。
    另外,将“脏话”一次性写死的方法应该优化为可以动态添加的“自适应”方案。