使用java从字符串中删除html标签[重复]
Posted
技术标签:
【中文标题】使用java从字符串中删除html标签[重复]【英文标题】:remove html tags from string using java [duplicate] 【发布时间】:2011-05-24 20:54:24 【问题描述】:我正在编写一个程序来读取和分离垃圾邮件和非正常电子邮件。现在我正在使用java的bufferedreader类阅读它。我可以使用 replaceAll() 方法删除任何不需要的字符,例如“(”或“。”等。我也想删除 html 标签,包括 &。如何实现这一点!?
谢谢
编辑: 感谢您的回复,但我已经有一个正则表达式,如何结合我的需求并投入其中。这是我现在使用的正则表达式。
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("&.*?;","")
将取出实体引用。尽管对我来说很奇怪,只是想删除这些,而不是将它们翻译回它们所代表的字符。
非常有用且强大的解决方案。
小心正则表达式,这不是一个完整的解决方案。它还替换了不需要的字符 -> 使用此表达式来处理字符串,例如“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标签[重复]的主要内容,如果未能解决你的问题,请参考以下文章