就像上一步说的那样,当敏感词超过了必定量时候,效率将会急剧降低。java
假设发布内容“再顶”,敏感词达到了1000个,按照快速实现的方法,循环1000次,显然不是最优方法。优化
由于“再”,“顶”并无出如今"办证、
气枪、
裸聊"
的第一个字集合"办、气、裸"中,因此咱们能够考虑当搜集全部敏感词第一个字集合来快速判断发布内容是否含有敏感词。
spa
package test; import static util.PrintUtil.print; import java.util.ArrayList; public class Test { static String[] keys = {"办证", "气枪", "裸聊"}; static String tContent = "再顶"; static ArrayList<String> list = new ArrayList<String>(); static { for (String k : keys) { if (!list.contains(k.substring(0, 1))) { list.add(k.substring(0, 1)); } } } /** * 快速实现的方法 */ public final static String test1(String content) { for (String k : keys) { if (content.indexOf(k) > -1) return k; } return null; } /** * 优化一 */ public final static String test2(String content) { boolean bFirst = false; int length = content.length(); for (int i = 0; i < length; i ++) { if (list.contains(content.substring(i, i + 1))) { bFirst = true; break; } } return bFirst ? test1(content) : null; } public static void main(String[] args) { long time1 = System.currentTimeMillis(); print(test2(tContent)); print("test2 time:" + (System.currentTimeMillis() - time1)); } }