Удаление URL из текста с помощью java

как удалить в url, представленном в текстовом примере https://stackoverflow.com/posts/12684739/edit-submit/64cdc173-a15f-4a54-bfbb-6701a199642b  String str = "Страх психоза после #AssamRiots - http://t.co/LdEbWTgD < а2 > ";

используя регулярное выражение.

Я хочу удалить весь текст в тексте. но он не работает

мой код

String pattern = "(http(.*?)\\s)";
Pattern pt = Pattern.compile(pattern);
Matcher namemacher = pt.matcher(input);
if (namemacher.find()) {
  str=input.replace(namemacher.group(0), "");
}

Ответ 1

Введите String, который содержит URL

private String removeUrl(String commentstr)
    {
        String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
        Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(commentstr);
        int i = 0;
        while (m.find()) {
            commentstr = commentstr.replaceAll(m.group(i),"").trim();
            i++;
        }
        return commentstr;
    }

Ответ 2

Ну, вы не предоставили никакой информации о своем тексте, поэтому с предположением о том, что ваш текст выглядит следующим образом: "Some text here http://www.example.com some text there", вы можете сделать это:

String yourText = "blah-blah";
String cleartext = yourText.replaceAll("http.*?\\s", " ");

Это приведет к удалению всех последовательностей, начинающихся с "http" и вплоть до первого символа пробела.

Вы должны прочитать Javadoc на String классе. Это будет ясно для вас.

Ответ 3

Как вы определяете URL? Вы можете не просто фильтровать http://, но также https://и другие протоколы, такие как ftp://, rss://или настраиваемые протоколы.

Возможно, это регулярное выражение выполнит задание:

[\S]+://[\S]+

Пояснение:

  • одно или несколько не-пробелов
  • за которым следует строка "://"
  • за которым следует одно или несколько не-пробелов

Ответ 4

Обратите внимание, что если ваш URL-адрес содержит такие символы, как и и \, то ответы выше не будут работать, потому что replaceAll не может обрабатывать эти символы. Что для меня работало, так это удалить эти символы в новой строковой переменной, а затем удалить эти символы из результатов m.find() и использовать replaceAll в моей новой строковой переменной.

private String removeUrl(String commentstr)
{
    // rid of ? and & in urls since replaceAll can't deal with them
    String commentstr1 = commentstr.replaceAll("\\?", "").replaceAll("\\&", "");

    String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
    Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(commentstr);
    int i = 0;
    while (m.find()) {
        commentstr = commentstr1.replaceAll(m.group(i).replaceAll("\\?", "").replaceAll("\\&", ""),"").trim();
        i++;
    }
    return commentstr;
}    

Ответ 5

m.group(0) следует заменить пустой строкой, а не m.group(i), где i увеличивается с каждым вызовом m.find(), как указано в одном из ответов выше.

private String removeUrl(String commentstr)
{
    String urlPattern = "((https?|ftp|gopher|telnet|file|Unsure|http):((//)|(\\\\))+[\\w\\d:#@%/;$()~_?\\+-=\\\\\\.&]*)";
    Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(commentstr);
    StringBuffer sb = new StringBuffer(commentstr.length);
    while (m.find()) {
        m.appendReplacement(sb, "");
    }
    return sb.toString();
}

Ответ 6

Если вы можете перейти к python, вы можете найти здесь гораздо лучшее решение, используя этот код,

import re
text = "<hello how are you ?> then ftp and mailto and gopher and file ftp://ideone.com/K3Cut rthen you "
text = re.sub(r"ftp\S+", "", result)
print(result)