Я часто вижу, как после этого блокирует контент публикации различных пользователей, и я думал о том, как это реализовать. Я думал об использовании струн для замены для его реализации, но эта эффективность очень низкая и не может гарантировать самое длинное совпадение. Это моя первоначальная идея в то время. В проекте, над которым я недавно работал, мне нужно было заблокировать какой -то контент, и я снова проанализировал эту проблему и, наконец, сформировал следующий код.
/ ***@Описание: Реализация функции слов маскированной*/ пакет cn.yicha.novel.search.util; Импорт java.io.bufferedReader; Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.filenotFoundException; импортировать java.io.ioexception; Импорт java.io.inputStreamReader; импортировать java.util.hashset; Импорт cn.yicha.novel.search.config.config; Общедоступный класс Запрет {частный статический запретный запрет = new Forbidden (); // маска Word Hashset Private Hashset <string> keystring = new Hashset <string> (); Приватный окончательный статический int maxlength = символ.max_value; // маска длины слов массив хэшсет @suppresswarnings ("uncecked") Частный хэшсет <Integer> [] keylength = new Hashset [maxlength]; private forbidden () {loadforbidden (config.getClassroot () + "forbidden.txt"); } public static forbidden getForbidden () {return forbidden; } / ** * @param str * @return * @description: входная строка замаскирована для достижения максимального сопоставления длины * / public String Read (String Str) {if (str == null) {return null; } StringBuffer stringBuffer = new StringBuffer (); int start = 0; for (int i = 0; i <str.length ();) {int at = str.charat (i); if (keylength [at] == null) {i ++; продолжать; } else {int ml = 0; for (объект obj: keylength [at] .toarray ()) {int len = ((integer) obj) .intvalue (); if (i + len <= str.length ()) {string s = str.substring (i, i + len); if (keystring.contains (s)) {// Максимальная длина Сопоставление ml = len> ml? Лен: мл; }}} if (ml> 0) {stringbuffer.append (str.substring (start, i)). Append ("***"); i += ml; Start = i; } else {i ++; }}}} if (start <str.length ()) {stringbuffer.append (str.substring (start)); } return stringbuffer.toString (); } /** * @param path * @description: инициализация слов маскировки нагрузки * @description: логика формата данных для хранения маскирующих слов следующая * @description: создать хэшсет <string> для хранения всех маскирующих слов * @description: создавать HASHSET <INTEGER> Array с MAXLength MaxLength = MASTER. int value, то есть позиция, в которой соответствующая информация хранится в массиве, * @description: если «привет» получает значение «you» - это 20320, то есть соответствующая информация о «Привет» хранится в районе 20320 года в борторе от борта позиция*/ public void LoadForBidden (String Path) {file forbiddenfile = new File (path); FileInputStream fileInputStream; try {fileInputStream = new FileInputStream (forbiddenFile); InputStreamReader InputStreamReader = new InputStreamReader (FileInputStream, "UTF-8"); BufferedReader BufferedReader = new BufferedReader (inputStreamReader); Строка S; while ((s = BufferedReader.readline ())! = null) {s = s.trim (); if (s.length ()> 0) {keystring.add (s); int i = s.charat (0); if (keylength [i] == null) {// маска длины слов хэшсет хэшсет <Integer> a = новый хэшсет <Integer> (); A.Add (S.Length ()); keylength [i] = a; } else {keylength [i] .add (s.length ()); }}} fileInputStream.close (); BufferedReader.Close (); fileInputStream.close (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} public static void main (string [] args) {// system.out.println (forbidden.getForbidden (). Read ("AV Actress Nihao")); int i = 'you'; System.out.println (i); }}Выше приведено код ключа для Java для реализации функции блокировки Word. Я надеюсь, что это будет полезно для каждого обучения.