Подскажите, как cделать простую и не очень медленную проверку отправляемого текста на сервер на наличие матов? Т.е ввел юзер плохие слова и идет проверка с коллекцией плохих слов.
Ну так над этой проблемой люди уже не первый год сражаются ) Я имею ввиду самая большая проблема - это оригинальность людей. Даже если в БД плохих слов добавить всякие искажение в духе "млять", люди всё равно начнут использовать там звёздочки какие нибудь, символы. А в конце концов просто оригинальный унижения придумают (хотя если проблема именно мат - то ничего страшного). Но если нужно просто проверить слово на совпадение с какими то образцами, то:
1) используем split("\s+");
чтобы разбить всё по словам. И дальше можно тупым свитчем перебирать. Более красиво - циклом по массиву матов. Ещё более красиво - бинарный поиск по хэшам. Не знаю какие там методы использует HashMap
, поэтому советовать не буду, но когда хотят скорости - используют именно его.
2) Огромный длинный regex, который будет искать маты. Вот это вариант поинтересней, Regex конечно нужно формировать из отдельных подстрок, чтобы код не забить. то будет красиво выглядеть, но вот не уверен насчет производительности. Пусть в комментариях напишут, если моё мнение, что это медленно - неверно.
И по ходу не забывайте про всякие хитрости, в духе toLowerCase
, дабы не городить ещё варианты с большими буквами. Сам список слов тоже можно автоматизировать, например предлоги + мат. Потом там гласные позаменять. Опять же кодом, а не руками. И в качестве инициализации, а не при каждой проверке. Сама проверка должна быть просто перебором возможных вариантов. И всё будет летать )
И ещё забыл. Способ, которым вы будете делать зависит от цели. Если у вас серьёзное приложение, то элементарно десяток-другой матов остановят 99% людей. Скорее как правило сработает, для людей которые по эмоциям написали "а, нельзя мат, ну ладно". Если же какой то средненький форум, я бы тоже не заморачивался. Но а если крупный детский ресурс, например и для вас это важная задача + очень много школьников - там придется извратится. А так вообще я бы пошел путем назначения модерации, вместо всяких этих заморочек.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую SpringНужно сделать post-запрос из андроид приложения
ПриветЯ новичок в программировании, пытаюсь сделать простенькое приложение для создания напоминаний
Есть база данных (postgreSQL) в ней имеется таблица с числами типа moneyЗадача достать с этой таблицы это число на языке джава