Удалить теги HTML из строки - PullRequest
       239

Удалить теги HTML из строки

395 голосов
/ 27 октября 2008

Есть ли хороший способ удалить HTML из строки Java? Простое регулярное выражение типа

 replaceAll("\\<.*?>","") 

будет работать, но такие вещи, как &amp;, не будут правильно конвертированы, а не-HTML между двумя угловыми скобками будут удалены (т.е. .*? в регулярном выражении исчезнет)

Ответы [ 28 ]

2 голосов
/ 04 сентября 2012

Можно также использовать Apache Tika для этой цели. По умолчанию он сохраняет пробелы из раздетого html, которые могут потребоваться в определенных ситуациях:

InputStream htmlInputStream = ..
HtmlParser htmlParser = new HtmlParser();
HtmlContentHandler htmlContentHandler = new HtmlContentHandler();
htmlParser.parse(htmlInputStream, htmlContentHandler, new Metadata())
System.out.println(htmlContentHandler.getBodyText().trim())
1 голос
/ 04 сентября 2015

Один из способов сохранить информацию о новой строке с помощью JSoup - это поставить перед всеми тегами новой строки некоторую фиктивную строку, выполнить JSoup и заменить фиктивную строку на "\ n".

String html = "<p>Line one</p><p>Line two</p>Line three<br/>etc.";
String NEW_LINE_MARK = "NEWLINESTART1234567890NEWLINEEND";
for (String tag: new String[]{"</p>","<br/>","</h1>","</h2>","</h3>","</h4>","</h5>","</h6>","</li>"}) {
    html = html.replace(tag, NEW_LINE_MARK+tag);
}

String text = Jsoup.parse(html).text();

text = text.replace(NEW_LINE_MARK + " ", "\n\n");
text = text.replace(NEW_LINE_MARK, "\n\n");
1 голос
/ 29 марта 2019

Вы можете просто использовать HTML-фильтр Android по умолчанию

    public String htmlToStringFilter(String html){

    return Html.fromHtml(textToFilter).toString();

    }

Приведенный выше метод вернет отфильтрованную строку HTML для вашего ввода.

0 голосов
/ 09 августа 2011

Мои 5 центов:

String[] temp = yourString.split("&amp;");
String tmp = "";
if (temp.length > 1) {

    for (int i = 0; i < temp.length; i++) {
        tmp += temp[i] + "&";
    }
    yourString = tmp.substring(0, tmp.length() - 1);
}
0 голосов
/ 17 ноября 2010

Вы можете просто создать метод с несколькими replaceAll (), например,

String RemoveTag(String html){
   html = html.replaceAll("\\<.*?>","")
   html = html.replaceAll("&nbsp;","");
   html = html.replaceAll("&amp;"."");
   ----------
   ----------
   return html;
}

Используйте эту ссылку для наиболее распространенных замен, которые вам нужны: http://tunes.org/wiki/html_20special_20characters_20and_20symbols.html

Это просто, но эффективно. Сначала я использую этот метод для удаления ненужной, но не самой первой строки, т.е. replaceAll ("\ <. *?>", ""), А позже я использую определенные ключевые слова для поиска индексов, а затем использую .substring (start, end ) метод избавления от ненужных вещей. Поскольку это более надежно, и вы можете точно указать, что вам нужно на всей html-странице.

0 голосов
/ 25 апреля 2013

Чтобы получить форматированный простой HTML-текст , вы можете сделать это:

String BR_ESCAPED = "&lt;br/&gt;";
Element el=Jsoup.parse(html).select("body");
el.select("br").append(BR_ESCAPED);
el.select("p").append(BR_ESCAPED+BR_ESCAPED);
el.select("h1").append(BR_ESCAPED+BR_ESCAPED);
el.select("h2").append(BR_ESCAPED+BR_ESCAPED);
el.select("h3").append(BR_ESCAPED+BR_ESCAPED);
el.select("h4").append(BR_ESCAPED+BR_ESCAPED);
el.select("h5").append(BR_ESCAPED+BR_ESCAPED);
String nodeValue=el.text();
nodeValue=nodeValue.replaceAll(BR_ESCAPED, "<br/>");
nodeValue=nodeValue.replaceAll("(\\s*<br[^>]*>){3,}", "<br/><br/>");

Чтобы получить форматированный простой текст , измените
на \ n и измените последнюю строку на:

nodeValue=nodeValue.replaceAll("(\\s*\n){3,}", "<br/><br/>");
0 голосов
/ 26 января 2018

ex: classeString.replaceAll ("\ <(/? [^ \>] +) \>", "\") .ReplaceAll ("\ s +", "") .trim ()

0 голосов
/ 03 сентября 2014

Удалить теги HTML из строки. Где-то нам нужно проанализировать некоторую строку, полученную некоторыми ответами, такими как Httpresponse с сервера.

Итак, нам нужно разобрать его.

Здесь я покажу, как удалить HTML-теги из строки.

    // sample text with tags

    string str = "<html><head>sdfkashf sdf</head><body>sdfasdf</body></html>";



    // regex which match tags

    System.Text.RegularExpressions.Regex rx = new System.Text.RegularExpressions.Regex("<[^>]*>");



    // replace all matches with empty strin

    str = rx.Replace(str, "");



    //now str contains string without html tags
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...