使用java从字符串中删除html标签[重复]

Posted

技术标签:

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

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

谢谢

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

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

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

【问题讨论】:

我试过 Jsoup..但它不工作..没有编译错误,它只是不工作.. 类似话题***.com/questions/1699313/…***.com/questions/240546/… 【参考方案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();

【讨论】:

对于 maven 用户,最新版本的 maven repos 链接:mvnrepository.com/artifact/org.jsoup/jsoup【参考方案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;

【讨论】:

以上是关于使用java从字符串中删除html标签[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用c#从文本中删除html标签[重复]

如何从字符串中删除所有html标签[重复]

如何在Java中删除HTML标签[重复]

从C#中的Html字符串中删除不必要的标签[重复]

删除正则表达式中的 Html 标签 [重复]

想要删除任何 HTML 标签 [重复]