Ich sehe oft die Postleiste, die verschiedene Benutzer in den Posting -Inhalten blockiert, und ich habe darüber nachgedacht, wie dies implementiert werden soll. Ich habe darüber nachgedacht, Strings zu verwenden, um sie zu implementieren, aber diese Effizienz ist sehr niedrig und kann nicht die längste Übereinstimmung garantieren. Dies ist meine erste Idee zu dieser Zeit. In einem Projekt, an dem ich kürzlich gearbeitet habe, musste ich einige Inhalte blockieren, und ich analysierte dieses Problem erneut und bildete schließlich den folgenden Code.
/ ***@Beschreibung: Implementierung der Masked Word -Funktion*/ Paket cn.yicha.novel.search.util; Import Java.io.BufferedReader; Import Java.io.file; import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.ioException; importieren java.io.inputStreamReader; import Java.util.hashset; import cn.yicha.novel.search.config.config; öffentliche Klasse verboten {private static verboten verboten = neu verboten (); // Mask Word Hashset Private Hashset <String> keyString = new Hashset <string> (); private endgültige statische int maxLength = Zeichen.MAX_VALUE; // Mask Word Länge Hashset Array @SuppressWarnings ("Deaktiviert") Private Hashset <Ganzzahl> [] KeyLength = new Hashset [maxLength]; private forbidden () {loadforbidden (config.getClassroot () + "Forbidden.txt"); } public static verboten Getforbidden () {return verboten; } / ** * @param str * @return * @Description: Die Eingangszeichenfolge wird maskiert, um eine maximale Länge zu erreichen. } StringBuffer stringBuffer = new StringBuffer (); int start = 0; für (int i = 0; i <str.length ();) {int at = str.charat (i); if (keyLength [at] == null) {i ++; weitermachen; } else {int ml = 0; für (Objekt 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)) {// maximale Länge Matching ml = len> ml? Len: ML; }}} if (ml> 0) {stringBuffer.Append (str.substring (start, i)). append ("***"); i += ml; starten = i; } else {i ++; }}}} if (start <str.length ()) {stringBuffer.append (str.substring (start)); } return stringBuffer.toString (); } /** * @param Pfad * @Description: Initialisieren Sie die Lademaskierungswörter * @Description: Die Datenformatlogik zum Speichern von Maskierungswörtern lautet wie folgt * @Description: Erstellen Sie eine Hashset <string>, um alle Wörter zu speichern Int -Wert, dh die Position, in der die relevanten Informationen im Array gespeichert sind,* @Description: Wenn "Hallo" den Wert von 'You' 20320 erhält, wird die relevanten Informationen von "Hallo" in der Position 20320 gespeichert. void loadforbidden (String Pfad) {Datei forbiddenFile = new Datei (Pfad); FileInputStream FileInputStream; try {FileInputStream = new FileInputStream (ForbiddenFile); InputStreamReader InputStreamReader = new InputStreamReader (FileInputStream, "UTF-8"); BufferedReader bufferedReader = neuer BufferedReader (InputStreamReader); String 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) {// Mask Word Länge Hashset Hashset <Integer> a = new Hashset <GanzEger> (); 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 -Schauspielerin Nihao"); int i = 'du'; System.out.println (i); }}Das obige ist der Schlüsselcode für Java, um die Blockierungswortfunktion zu implementieren. Ich hoffe, es wird für das Lernen aller hilfreich sein.