文档章节

Android敏感词过滤工具类

峰易
 峰易
发布于 2017/04/05 14:40
字数 538
阅读 153
收藏 0

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);
    }
}
 

© 著作权归作者所有

峰易
粉丝 1
博文 16
码字总数 13133
作品 0
杭州
程序员
私信 提问
Android API Levels

原文 http://developer.android.com/guide/appendix/api-levels.html Android API Levels manifest element 当你开发你的Android应用程序时,了解该平台API变更管理的基本方法和概念是很有帮...

阿酷
2011/11/16
2.5K
2
Android开发者指南(10) —— Android API Levels

Android开发者指南(10) —— Android API Levels 前言   本章内容为开发者指南(Dev Guide)/Appendix/Android API Levels,版本为Android3.0 r1,翻译来自:"jackeylu",欢迎大家访问他的博...

vane_
2012/09/19
287
0
浅谈:APP有哪些常被黑客利用的安全漏洞

首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时...

今晚打猴子
2015/08/01
207
0
浅谈:APP有哪些常被黑客利用的安全漏洞

首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时...

今晚打猴子
2015/06/29
2.5K
0
Windows环境下Android Studio系列5—日志调试

定制Logcat调试日志字体颜色 Logcat是Android开发调试中最常用的一个工具,Android Studio 1.2.2中默认对Logcat调试的颜色已经有所区分,但如果你想要定制自己的调试日志对应的字体颜色,以便...

一配
2015/07/15
10.7K
1

没有更多内容

加载失败,请刷新页面

加载更多

3.深入jvm内核-原理、诊断与优化-1.初始jvm

一、 初始jvm 有关补码,简要阐述补码的好处。并计算给出 -99, -105, 205 整数的补码 答:简述补码的好处: 在人们的计算概念中零是没有正负之分的,统一0的处理 统一处理加减法,无需增加...

hexiaoming123
27分钟前
2
0
实现线程类的两种方式

第一种方式:让目标类继承Thread类 package com.atzhongruan.springboot_boostrap.Test;/** * @Author jose * date 2019 */public class Task1 extends Thread{ @Override......

zhengzhixiang
44分钟前
5
0
OSChina 周日乱弹 —— 然而并不能,他是公的。

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小小编辑推荐:《兔子姑娘》- 陈老实 《兔子姑娘》- 陈老实 手机党少年们想听歌,请使劲儿戳(这里) @曼尼22 :我倒要看看我头发啥时候掉完...

小小编辑
50分钟前
85
5
QML学习之浅谈Window

转载地址:http://blog.csdn.net/kanchuan1905/article/details/53762788 在Qt Quick的世界里,Window对象用于创建一个与操作系统相关的顶层窗口,包含了如Text, Rectangle, Image等元素。W...

shzwork
今天
6
0
centos 查看删除旧内核

1、查看系统中安装的内核 $ yum list installed | grep kernel 2、删除系统中旧内核 $ yum install yum-utils$ package-cleanup --oldkernels --count=2...

编程老陆
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部