Je vois souvent le post-bar bloquant le contenu de publication de divers utilisateurs, et j'ai réfléchi à la façon de l'implémenter. J'ai pensé à utiliser des chaînes pour remplacer la mise en œuvre, mais cette efficacité est très faible et ne peut garantir la plus longue correspondance. C'est mon idée initiale à ce moment-là. Dans un projet sur lequel j'ai récemment travaillé, je devais bloquer du contenu et j'ai analysé à nouveau ce problème et j'ai finalement formé le code suivant.
/ ** * @ Description: Implémentation de la fonction du mot masqué * / package cn.yicha.novel.search.util; Importer java.io.bufferedReader; Importer java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.ioException; Importer java.io.inputStreamReader; import java.util.hashset; Importer cn.yicha.novel.search.config.config; classe publique interdite {privé statique interdit interdit = new Forbidden (); // masque le mot hashset privé hashset <string> keystring = new hashset <string> (); private final static int maxLength = caractères.max_value; // masque la longueur du mot hashset array @SuppressWarnings ("Unchecked") HashSet privé <Integer> [] keyLength = new HashSet [maxLength]; Private Forbidden () {LoadForbidden (config.getClassroot () + "Forbidden.txt"); } public static interdite getForbidden () {retour interdit; } / ** * @param str * @return * @Description: La chaîne d'entrée est masquée pour atteindre une longueur maximale correspondant * / 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 ++; continuer; } else {int ml = 0; pour (objet 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)) {// correspondant maximum correspondant ml = len> 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: Initialisez les mots de masquage de chargement * @Description: La logique de format de données pour stocker les mots de masquage est le suivant * @Description: Créer un hashset <string> Pour stocker tous les mots de masquage * @description: construire un hashset <inderd> Arrayer avec le caractère maxlownd Int Valeur, c'est-à-dire la position où les informations pertinentes sont stockées dans le tableau, * @Description: si "Hello" obtient la valeur int `` vous '' est 20320, c'est-à-dire que les informations pertinentes de "Hello" sont stockées dans la position 20320 de la table * @description: la longueur du mot masque stocké dans chaque éventail de la table est stockée dans la position de la Hashset <integer> Position * / public void loadForbidden (String Path) {fichier ForbidDenFile = nouveau fichier (path); FileInputStream FileInputStream; try {fileInputStream = new FileInputStream (ForbiddenFile); InputStreamReader inputStreamReader = new inputStreamReader (fileInputStream, "utf-8"); BufferedReader BufferedReader = new BufferedReader (InputStreamReader); String S; while ((s = buttereDreader.readline ())! = null) {s = s.trim (); if (s.Length ()> 0) {keystring.add (s); int i = s.charat (0); if (keyLength [i] == null) {// masque la longueur du mot 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 (Forbidden.getForbidden (). Read ("AV actrice nihao")); int i = 'vous'; System.out.println (i); }}Ce qui précède est le code clé pour Java pour implémenter la fonction de blocage de blocage. J'espère que cela sera utile à l'apprentissage de tous.