加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java实现敏感字过滤

发布时间:2020-12-14 23:37:57 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
 * 过滤敏感词,并把敏感词替换成*
 * 
 */
public class SensitiveWordUtils {

    static ArrayList<String> first = new ArrayList<String>();
    static String[] sortFirst;
    static char[] charFirst;
    static HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();
    static HashMap<String,String[]> sortMap = new HashMap<String,String[]>();
    static HashMap<String,char[]> charMap = new HashMap<String,char[]>();

    static ArrayList<String> temp;
    static String key,value;
    int length;
    /**
     * 带参数的构造函数
     * 
     * @param keys
     *            敏感词
     * @param tContent
     *            需要过滤的内容
     */
    public SensitiveWordUtils(List<String> keys,String tContent) {

        for (String k : keys) {
            if (!first.contains(k.substring(0,1))) {
                first.add(k.substring(0,1));
            }
            length = k.length();
            for (int i = 1; i < length; i++) {
                key = k.substring(0,i);
                value = k.substring(i,i + 1);
                if (i == 1 && !first.contains(key)) {
                    first.add(key);
                }

                // 有,添加
                if (map.containsKey(key)) {
                    if (!map.get(key).contains(value)) {
                        map.get(key).add(value);
                    }
                }
                // 没有添加
                else {
                    temp = new ArrayList<String>();
                    temp.add(value);
                    map.put(key,temp);
                }
            }
        }
        sortFirst = first.toArray(new String[first.size()]);
        Arrays.sort(sortFirst); // 排序

        charFirst = new char[first.size()];
        for (int i = 0; i < charFirst.length; i++) {
            charFirst[i] = first.get(i).charAt(0);
        }
        Arrays.sort(charFirst); // 排序

        String[] sortValue;
        ArrayList<String> v;
        Map.Entry<String,ArrayList<String>> entry;
        Iterator<Entry<String,ArrayList<String>>> iter = map.entrySet()
                .iterator();
        while (iter.hasNext()) {
            entry = (Map.Entry<String,ArrayList<String>>) iter.next();
            v = (ArrayList<String>) entry.getValue();
            sortValue = v.toArray(new String[v.size()]);
            Arrays.sort(sortValue); // 排序
            sortMap.put(entry.getKey(),sortValue);
        }

        char[] charValue;
        iter = map.entrySet().iterator();
        while (iter.hasNext()) {
            entry = (Map.Entry<String,ArrayList<String>>) iter.next();
            v = (ArrayList<String>) entry.getValue();
            charValue = new char[v.size()];
            for (int i = 0; i < charValue.length; i++) {
                charValue[i] = v.get(i).charAt(0);
            }
            Arrays.sort(charValue); // 排序
            charMap.put(entry.getKey(),charValue);
        }
    }
    /**
     * 把敏感词替换成*
     * 
     * @param content
     *            需要过滤的内容
     * @return 过滤完后的符合要求的内容
     */
    public String replace(String content) {
        String r = null,f,c = content;
        String replacedword = content;
        char g;
        char[] temps;
        int length = c.length();
        for (int i = 0; i < length - 1; i++) {
            g = c.charAt(i);
            // 二分查找
            if (Arrays.binarySearch(charFirst,g) > -1) {
                tag : for (int j = i + 1; j < length; j++) {
                    f = c.substring(i,j);
                    g = c.charAt(j);
                    temps = charMap.get(f);
                    if (temps == null) { // 找到了
                        System.out.println("ok");
                        r = f;
                        String str = "";
                        for (int m = 1; m <= r.length(); m++) {
                            str = str + "*";
                        }
                        replacedword = c.replace(r,str);
                        c = replacedword;
                        break tag;
                    }
                    // 二分查找
                    if (Arrays.binarySearch(temps,g) > -1) {
                        if (j == length - 1) {
                            // print("find!");
                            System.out.println("find!");
                            r = c.substring(i,j + 1);
                            String str = "";
                            for (int m = 1; m <= r.length(); m++) {
                                str = str + "*";
                            }
                            replacedword = c.replace(r,str);
                            c = replacedword;
                            break tag;
                        }
                    } else { // 没有找到了
                        break;
                    }
                }
            }
        }
        return replacedword;
    }
}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读