Android敏感词过滤主要类
package com.tradeaider.app.utils;
import com.tradeaider.app.activity.MyApplication;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @name tradeaider-andriod
* @class describe
* @anthor Fengy Email:wangk@shinyhub.cn
* @time 2017/3/22 11:36
* @class describe: 过滤敏感词工具类
*/
public class SensitiveWordUtils {
private static String ENCODING = "utf-8"; /* 字符编码 */
static ArrayList<String> first = new ArrayList<String>();
static List<String> keys=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;
private static boolean isSingleFlag=false;
private static MyApplication application=MyApplication.getInstance();
static {
String general=application.getSensitiveGeneral();
String contact=application.getSensitiveContact();
isSingleFlag=application.getIsSingleSession();
String[] generalArray=general.split(";");
String[] contactArray=contact.split(";");
for (int i=0;i<generalArray.length;i++){
keys.add(generalArray[i]);
}
if(!isSingleFlag){
for (int k=0;k<contactArray.length;k++){
keys.add(contactArray[k]);
}
}
}
/**
* 带参数的构造函数
*
* @param tContent 需要过滤的内容
*/
public SensitiveWordUtils(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<Map.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);
}
}
Android敏感词过滤主要类的更多相关文章
- java实现敏感词过滤(DFA算法)
小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...
- Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
- 浅析敏感词过滤算法(C++)
为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...
- Java实现敏感词过滤
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...
- Java实现敏感词过滤(转)
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- Jsp敏感词过滤
Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...
- Java实现敏感词过滤 - IKAnalyzer中文分词工具
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...
- Java实现敏感词过滤 - DFA算法
Java实现DFA算法进行敏感词过滤 封装工具类如下: 使用前需对敏感词库进行初始化: SensitiveWordUtil.init(sensitiveWordSet); package cn.swf ...
随机推荐
- ImageSpan图片不能居中的问题
点击下载:MyImageSpan.txt 使用ImageSpan的童鞋应该都会遇到这样一个困惑,图片不能居中显示,ImageSpan中只有ImageSpan.ALIGN_BASELINE与ImageS ...
- 纪中集训 Day1
今天早上起来吃饭,发现纪中伙食真的是太差了!!!什么都不热,早餐的面包还好,然后就迎来了美好的早晨= = 早上做一套题,T1T2果断秒,T3一看就是noi原题,还好看过题解会写,然后就愉快的码+Deb ...
- Java回调机制解读
模块间调用 在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等 ...
- C# 图片平移及缩放
1.图片平移 Monitor.rar 在CSDN上下载,是个有地图编辑功能. http://download.csdn.net/detail/gxingmin/883699 2.图片缩放 http:/ ...
- MegCup 2017 极客挑战赛 初赛试题
看着像八卦,数数不是八卦,是29卦 每卦又有29个小弧 所以是29×29个bit 这29×29个bit怎么理解呢?并且从哪一卦开始到哪一卦结束?是先环向层层向里走还是先径向逐卦走? 我想不出来. 我猜 ...
- 使用Nuget管理dll
前言 nuget 已经不是什么新东西,它是vs的一个扩展工具,可以让我们在项目中添加.删除.更新引用变得更加快捷方便.现在有许多传统公司对dll的管理还是很落后的,有些甚至时通过发送dll文件,这样做 ...
- JavaScript两个变量交换值(不使用临时变量)
概要 本文主要描述,如何不使用中间值,将两个变量的值进行交换. 一.普通做法 var a = 1, b = 2, tmp; tmp = a; a = b; b = tmp; 普通的做法就是声明多一 ...
- 【转】Docker —— 从入门到实践
http://yeasy.gitbooks.io/docker_practice/content/index.html Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud ...
- angular 2 animate 笔记
好久没有在这里写点笔记了.时隔已久,angular1 去 angular2 咯 笔记来源:https://angular.cn/docs/ts/latest/guide/animations.html ...
- 每天一个linux命令(40)--route命令
Linux 系统的route 命令用于显示和操作IP路由表(show /manipulate the ip routing table).要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器, ...