日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 敏感词过滤器,android 过滤敏感词主要类

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 敏感词过滤器,android 过滤敏感词主要类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

package com.example.demo;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class SensitiveWordsUtils {

/**

* 敏感詞匹配規則

*/

public static final int MinMatchTYpe =1;

public static final int MaxMatchType =2;

/**

* 敏感詞集合

*/

public static HashMapsensitiveWordMap;

/**

* 初始化敏感詞庫,構建DFA算法模型

*

* @param sensitiveWordSet 敏感詞庫

*/

public static synchronized void init(Set sensitiveWordSet) {

initSensitiveWordMap(sensitiveWordSet);

}

/**

* 初始化敏感詞庫,構建DFA算法模型

*

* @param sensitiveWordSet 敏感詞庫

*/

private static void initSensitiveWordMap(Set sensitiveWordSet) {

//初始化敏感詞容器,減少擴容操作

sensitiveWordMap =new HashMap(sensitiveWordSet.size());

String key;

Map nowMap;

Map newWorMap;

//迭代sensitiveWordSet

Iterator iterator = sensitiveWordSet.iterator();

while (iterator.hasNext()) {

//關鍵字

key = iterator.next();

nowMap =sensitiveWordMap;

for (int i =0; i < key.length(); i++) {

//轉換成char型

char keyChar = key.charAt(i);

//庫中獲取關鍵字

Object wordMap = nowMap.get(keyChar);

//如果存在該key,直接賦值,用于下一個循環獲取

if (wordMap !=null) {

nowMap = (Map) wordMap;

}else {

//不存在則,則構建一個map,同時將isEnd設置為0,因為他不是最后一個

newWorMap =new HashMap<>();

//不是最后一個

newWorMap.put("isEnd", "0");

nowMap.put(keyChar, newWorMap);

nowMap = newWorMap;

}

if (i == key.length() -1) {

//最后一個

nowMap.put("isEnd", "1");

}

}

}

}

/**

* 判斷文字是否包含敏感字符

*

* @param txt? ? ? 文字

* @param matchType 匹配規則 1:最小匹配規則,2:最大匹配規則

* @return 若包含返回true,否則返回false

*/

public static boolean contains(String txt, int matchType) {

boolean flag =false;

for (int i =0; i < txt.length(); i++) {

int matchFlag =checkSensitiveWord(txt, i, matchType); //判斷是否包含敏感字符

if (matchFlag >0) {//大于0存在,返回true

flag =true;

}

}

return flag;

}

/**

* 判斷文字是否包含敏感字符

*

* @param txt 文字

* @return 若包含返回true,否則返回false

*/

public static boolean contains(String txt) {

return contains(txt, MaxMatchType);

}

/**

* 獲取文字中的敏感詞

*

* @param txt? ? ? 文字

* @param matchType 匹配規則 1:最小匹配規則,2:最大匹配規則

* @return

*/

public static SetgetSensitiveWord(String txt, int matchType) {

Set sensitiveWordList =new HashSet<>();

for (int i =0; i < txt.length(); i++) {

//判斷是否包含敏感字符

int length =checkSensitiveWord(txt, i, matchType);

if (length >0) {//存在,加入list中

sensitiveWordList.add(txt.substring(i, i + length));

i = i + length -1;//減1的原因,是因為for會自增

}

}

return sensitiveWordList;

}

/**

* 獲取文字中的敏感詞

*

* @param txt 文字

* @return

*/

public static SetgetSensitiveWord(String txt) {

return getSensitiveWord(txt, MaxMatchType);

}

/**

* 替換敏感字字符

*

* @param txt? ? ? ? 文本

* @param replaceChar 替換的字符,匹配的敏感詞以字符逐個替換,如 語句:我愛中國人 敏感詞:中國人,替換字符:*, 替換結果:我愛***

* @param matchType? 敏感詞匹配規則

* @return

*/

public static StringreplaceSensitiveWord(String txt, char replaceChar, int matchType) {

String resultTxt = txt;

//獲取所有的敏感詞

Set set =getSensitiveWord(txt, matchType);

Iterator iterator = set.iterator();

String word;

String replaceString;

while (iterator.hasNext()) {

word = iterator.next();

replaceString =getReplaceChars(replaceChar, word.length());

resultTxt = resultTxt.replaceAll(word, replaceString);

}

return resultTxt;

}

/**

* 替換敏感字字符

*

* @param txt? ? ? ? 文本

* @param replaceChar 替換的字符,匹配的敏感詞以字符逐個替換,如 語句:我愛中國人 敏感詞:中國人,替換字符:*, 替換結果:我愛***

* @return

*/

public static StringreplaceSensitiveWord(String txt, char replaceChar) {

return replaceSensitiveWord(txt, replaceChar, MaxMatchType);

}

/**

* 替換敏感字字符

*

* @param txt? ? ? ? 文本

* @param replaceStr 替換的字符串,匹配的敏感詞以字符逐個替換,如 語句:我愛中國人 敏感詞:中國人,替換字符串:[屏蔽],替換結果:我愛[屏蔽]

* @param matchType? 敏感詞匹配規則

* @return

*/

public static StringreplaceSensitiveWord(String txt, String replaceStr, int matchType) {

String resultTxt = txt;

//獲取所有的敏感詞

Set set =getSensitiveWord(txt, matchType);

Iterator iterator = set.iterator();

String word;

while (iterator.hasNext()) {

word = iterator.next();

resultTxt = resultTxt.replaceAll(word, replaceStr);

}

return resultTxt;

}

/**

* 替換敏感字字符

*

* @param txt? ? ? ? 文本

* @param replaceStr 替換的字符串,匹配的敏感詞以字符逐個替換,如 語句:我愛中國人 敏感詞:中國人,替換字符串:[屏蔽],替換結果:我愛[屏蔽]

* @return

*/

public static StringreplaceSensitiveWord(String txt, String replaceStr) {

return replaceSensitiveWord(txt, replaceStr, MaxMatchType);

}

/**

* 獲取替換字符串

*

* @param replaceChar

* @param length

* @return

*/

private static StringgetReplaceChars(char replaceChar, int length) {

String resultReplace = String.valueOf(replaceChar);

for (int i =1; i < length; i++) {

resultReplace += replaceChar;

}

return resultReplace;

}

/**

* 檢查文字中是否包含敏感字符,檢查規則如下:

*

* @param txt

* @param beginIndex

* @param matchType

* @return 如果存在,則返回敏感詞字符的長度,不存在返回0

*/

private static int checkSensitiveWord(String txt, int beginIndex, int matchType) {

//敏感詞結束標識位:用于敏感詞只有1位的情況

boolean flag =false;

//匹配標識數默認為0

int matchFlag =0;

char word;

Map nowMap =sensitiveWordMap;

for (int i = beginIndex; i < txt.length(); i++) {

word = txt.charAt(i);

//獲取指定key

nowMap = (Map) nowMap.get(word);

if (nowMap !=null) {//存在,則判斷是否為最后一個

//找到相應key,匹配標識+1

matchFlag++;

//如果為最后一個匹配規則,結束循環,返回匹配標識數

if ("1".equals(nowMap.get("isEnd"))) {

//結束標志位為true

flag =true;

//最小規則,直接返回,最大規則還需繼續查找

if (MinMatchTYpe == matchType) {

break;

}

}

}else {//不存在,直接返回

break;

}

}

if (matchFlag <2 && !flag) {//長度必須大于等于1,為詞

matchFlag =0;

}

return matchFlag;

}

}

總結

以上是生活随笔為你收集整理的android 敏感词过滤器,android 过滤敏感词主要类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。