Удаление 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)