Mam obowiązek odfiltrowywania wulgaryzmów od zgłoszeń użytkowników w aplikacji internetowej opartej na Javie. Klient jest świadomy zarówno problemu Scunthorpe, jak i problemu Clbuttic i zaakceptował konsekwencje. Proszę, nie chcę debaty na temat zalet jej braku cenzury.
Istnieją dwa bity danych:
- Zgłoszenie użytkownika, które może potencjalnie zawierać około 500 słów;
- Jednokolumnowa tabela bazy danych zawierająca niedozwolone słowa. Tabela może zawierać wiele tysięcy rekordów.
Wydaje mi się, że obecne rozwiązanie jest złe:
- Cała tabela jest ładowana do statycznego ciągu [] podczas uruchamiania w singletonie (tym samym rezydując w pamięci).
- Dla każdego zgłoszenia użytkownika przeglądamy tablicę i wykonujemy .indexOf (), aby sprawdzić, czy jakieś słowo w ciągu String [] pojawia się w zgłoszeniu.
- Jeśli się pojawi, zastępujemy znakami w stylu% $ # @% -. Odbywa się to poprzez tokenizowanie przesłania użytkownika, przechodzenie przez całe przesyłanie użytkownika jako tokeny (ponownie) i zastępowanie każdego wystąpienia znalezionego słowa.
W tym rozwiązaniu może być błyskotliwość, ale jestem sceptyczny. I patrząc na to przez jakiś czas, nie mogę znaleźć drogi, by to minąć.
Pytanie brzmi: jakie rozwiązanie zapewni dobrą wydajność i, miejmy nadzieję, rozsądne zachowanie dla przyszłych programistów po zwolnieniu mnie z powodu niefiltrowania jakiegoś niejasnego słowa, o którym nigdy nie słyszałem?