Ho l'obbligo di filtrare le parolacce dagli invii degli utenti in un'applicazione web basata su Java. Il client è a conoscenza sia del Scunthorpe Problem che del Clbuttic Problem e hanno accettato le conseguenze. Per favore, non desidero un dibattito sul merito della mancanza della censura.
Ci sono due bit di dati:
- L'invio dell'utente, che può potenzialmente contenere circa 500 parole;
- Una tabella di database a colonna singola contenente parole non consentite. Ci possono essere molte migliaia di record in questa tabella.
La soluzione attuale mi sembra sbagliata:
- L'intera tabella viene caricata in una stringa statica [] all'avvio in un Singleton (quindi residente in memoria).
- Per ogni invio di un utente eseguiamo un ciclo attraverso la matrice e facciamo un .indexOf () per vedere se una determinata parola nella stringa [] appare nella submission.
- Se appare, sostituiremo con% $ # @% - caratteri di stile. Ciò viene effettuato mediante tokenizzazione dell'invio dell'utente, eseguendo il loop dell'intero invio dell'utente come token (di nuovo) e sostituendo ogni istanza della parola trovata.
Potrebbe esserci una brillantezza in questa soluzione, ma sono scettico. E dopo averlo guardato per un po 'non riesco a trovare la via per superarlo.
Le domande sono, qual è una soluzione che darà buone prestazioni e, si spera, ragionevolmente ragionevole per gli sviluppatori futuri da mantenere dopo essere stato licenziato per non aver filtrato alcune parole oscure di cui non ho mai sentito parlare?