Проблема со всеми предлагаемыми подходами: все RegEx - проверка
Весь код на основе RegEx перегружен: он найдет только действительные URL! В качестве примера, он будет игнорировать все, что начинается с "http://" и содержит символы не ASCII внутри.
Еще больше: я столкнулся с 1-2-секундным временем обработки (однопоточным, выделенным) с пакетом Java RegEx (фильтрация адресов электронной почты из текста) для очень маленьких и простых предложений, ничего конкретного; возможно ошибка в Java 6 RegEx ...
Простейшим / самым быстрым решением было бы использование StringTokenizer для разделения текста на токены, удаления токенов, начинающихся с "http://" и т. Д., И повторного объединения токенов в текст.
Если вы хотите отфильтровать электронные письма из текста (потому что позже вы будете работать с персоналом НЛП и т. Д.) - просто удалите все токены, содержащие "@" внутри.
Это простой текст, где RegEx Java 6 не работает. Попробуйте это в разных вариантах Java. В длинном однопоточном тестовом приложении требуется около 1000 миллисекунд на вызов RegEx:
pattern = Pattern.compile("[A-Za-z0-9](([_\\.\\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\\.\\-]?[a-zA-Z0-9]+)*)\\.([A-Za-z]{2,})", Pattern.CASE_INSENSITIVE);
"Avalanna is such a sweet little girl! It would b heartbreaking if cancer won. She's so precious! #BeliebersPrayForAvalanna");
"@AndySamuels31 Hahahahahahahahahhaha lol, you don't look like a girl hahahahhaahaha, you are... sexy.";
Не полагайтесь на регулярные выражения, если вам нужно только фильтровать слова с помощью "@", "http://"," ftp: // "," mailto: "; это огромные технические затраты.
Если вы действительно хотите использовать RegEx с Java, попробуйте Автомат