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 ...
随机推荐
- 利用busybox制作根文件系统
实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...
- MobileOA第一期总结
MobileOA第一期总结 前段时间一直没有更新博客,好想给自己找个借口---恩,我还是多找几个吧.毕业论文.毕业照,再感伤一下,出去玩一下,不知不觉就过去几个月了.然后上个月底才重新回到学习之路,从 ...
- 【转】JDBC连接数据库
创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...
- mysql uodate select子查询
UPDATE user SET pwd='123' WHERE id in ( SELECT id from user WHERE username = 'zx' ); 报错[Err] 1093 ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
- c#基础——for循环嵌套经典练习题(打★)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 作业题1 ...
- Linux 安装DenyHost防止ssh被暴力破解
DenyHosts介绍 当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描).如果遇到这个问题,一款非常有用的工具D ...
- Android学习总结(十二)———— BaseAdapter优化
一.BaseAdapter的基本概念 对于Android程序员来说,BaseAdapter肯定不会陌生,灵活而优雅是BaseAdapter最大的特点.开发者可以通过构造BaseAdapter并搭载到L ...
- 如何配置多台mysql 服务器?
当我们数据量增大时,数据库需要进行扩张时,或者做高可用,那么我们就需要用到同时多台mysql服务器.通过配置:可以实现,一台主mysql,负责记录数据的变化,多台从mysql,查询结果.修改文件:/w ...
- Java面试01|JVM相关
1.JVM内存查看与分析,编写内存泄露实例 堆区.栈区.方法区.本机内存都有可能内存溢出.在这里编写堆区内存溢出实例.如下(来自<深入理解Java虚拟机>一书. // -Xms20m -X ...