Java實現敏感字過濾

dd2d 9年前發布 | 2K 次閱讀 Java

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; } }</pre>
 本文由用戶 dd2d 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!