【问题标题】:remove html tags from string using java [duplicate]使用java从字符串中删除html标签[重复]
【发布时间】:2011-05-24 20:54:24
【问题描述】:

我正在编写一个程序来读取和分离垃圾邮件和非正常电子邮件。现在我正在使用java的bufferedreader类阅读它。我可以使用 replaceAll() 方法删除任何不需要的字符,例如“(”或“。”等。我也想删除 html 标签,包括 &amp。如何实现这一点!?

谢谢

编辑: 感谢您的回复,但我已经有一个正则表达式,如何结合我的需求并投入其中。这是我现在使用的正则表达式。

lines.replaceAll("[^a-zA-Z]", " ")

注意:我从 txt 文件中获取行。 请问还有什么建议吗?!

【问题讨论】:

标签: java html string


【解决方案1】:

导入 java.io.*;

public class Html2TextWithRegExp {


public static void main (String[] args) throws Exception{
 StringBuilder sb = new StringBuilder();
 BufferedReader br = new BufferedReader(new FileReader("java-new.html"));
 String line;
 while ( (line=br.readLine()) != null) {
   sb.append(line);
   // or
   //  sb.append(line).append(System.getProperty("line.separator"));
 }
 String nohtml = sb.toString().replaceAll("\\<.*?>","");
 System.out.println(nohtml);
 }
}

【讨论】:

  • 为什么要创建一个空的构造函数?
【解决方案2】:

也许这会起作用:

String noHTMLString = htmlString.replaceAll("\\<.*?>","");

它使用regular expressions 删除字符串中的所有 HTML 标签。

更具体地说,它会从字符串中删除所有类似 XML 的标签。因此,即使 不是有效的 HTML 标记,它也会被删除。但这对大多数意图和目的都有好处。

希望这会有所帮助。

【讨论】:

  • 第二次调用,如replaceAll("&amp;.*?;","") 将取出实体引用。尽管对我来说很奇怪,只是想删除这些,而不是将它们翻译回它们所代表的字符。
  • 非常有用且强大的解决方案。
  • 小心正则表达式,这不是一个完整的解决方案。它还替换了不需要的字符 -> 使用此表达式来处理字符串,例如“a d”导致“a d”。
  • 没错,这是一种快速而肮脏的做法,应谨慎使用。
【解决方案3】:

JSOUP

public static String html2text(String html) {
    return Jsoup.parse(html).text();
}

【讨论】:

【解决方案4】:

你会想要做一些轻量级的解析来剥离 HTML:

String extractText(String html) throws IOException {
    final ArrayList<String> list = new ArrayList<String>();

    ParserDelegator parserDelegator = new ParserDelegator();
    ParserCallback parserCallback = new ParserCallback() {
        public void handleText(final char[] data, final int pos) { 
            list.add(new String(data));
        }
        public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { }
        public void handleEndTag(Tag t, final int pos) {  }
        public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { }
        public void handleComment(final char[] data, final int pos) { }
        public void handleError(final java.lang.String errMsg, final int pos) { }
    };
    parserDelegator.parse(new StringReader(html), parserCallback, true);

    String text = "";

    for(String s : list) {
        text += " " + s;
    }

    return text;
}

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2011-03-24
    • 1970-01-01
    • 2012-01-31
    • 2021-06-21
    • 2015-10-09
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多