A menudo veo que la barra de publicaciones bloquea el contenido de publicación de varios usuarios, y pensé en cómo implementar esto. Pensé en usar cadenas para reemplazarlo para implementarlo, pero esta eficiencia es muy baja y no puede garantizar la coincidencia más larga. Esta es mi idea inicial en ese momento. En un proyecto en el que recientemente trabajé, necesitaba bloquear algo de contenido, y analicé este problema nuevamente y finalmente formé el siguiente código.
/ ***@Descripción: Implementación de la función de palabras enmascaradas*/ paquete cn.yicha.novel.search.util; import java.io.bufferedReader; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioException; import java.io.inputstreamreader; import java.util.hashset; import cn.yicha.novel.search.config.config; Clase pública Prohibida {Prohibido estático privado Prohibido = new ProbidDen (); // Mask Word Hashset Hashset privado <String> keyString = new Hashset <String> (); Private final static int maxLength = caracteres.max_value; // enmascarar la longitud de palabras array @supplesswarnings ("sin verificar") hashset privado <integer> [] keylength = new Hashset [maxLength]; private prohibidDen () {loadForbidden (config.getClassroot () + "foridden.txt"); } Public Static ProbidDen GetForbidden () {return ProbidDen; } / ** * @param str * @return * @Description: la cadena de entrada está enmascarada para lograr una longitud máxima coincidente * / public string read (String str) {if (str == null) {return null; } StringBuffer StringBuffer = new StringBuffer (); int inicio = 0; for (int i = 0; i <str.length ();) {int at = str.charat (i); if (keylength [at] == null) {i ++; continuar; } else {int ml = 0; for (objeto 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)) {// Longitud máxima coincide ml = len> ml? Len: ML; }}} if (ml> 0) {stringBuffer.append (str.substring (inicio, i)). append ("***"); i += ml; inicio = i; } else {i ++; }}}} if (start <str.length ()) {stringbuffer.append (str.substring (start)); } return StringBuffer.ToString (); } /** * @param path * @Description: Initialize the loading masking words * @Description: The data format logic for storing masking words is as follows * @Description: Build a HashSet<String> to store all masking words* @Description: Build a HashSet<Integer> array with length maxLength = Character.MAX_VALUE* @Description: Convert the first character in the loaded mask into an int Valor, es decir, la posición en la que la información relevante se almacena en la matriz,* @Description: si "Hello" obtiene el valor int de 'usted' es 20320, es decir, la información relevante de "Hello" se almacena en la posición 20320 de la Matriz* @Description: la longitud de la máscara de la máscara almacenada en cada bit de la Arriz de Posicionada de la Posición. loadForbidDden (string ruta) {archivo forbidDenFile = new File (ruta); FileInputStream FileInputStream; intente {fileInputStream = new FileInputStream (ForbidDenFile); InputStreamReader inputStreamReader = new InputStreamReader (fileInputStream, "UTF-8"); BufferedReader BufferedReader = new BufferedReader (inputStreamReader); Cadena 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) {// Máscara longitud de palabra hashset hashset <integer> a = new Hashset <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 (prohibidDen.getForBidDden (). Read ("AV Actriz Nihao")); int i = 'tu'; System.out.println (i); }}El anterior es el código clave para Java para implementar la función de palabra de bloqueo. Espero que sea útil para el aprendizaje de todos.