使用java从字符串中删除html标记

时间:2010-12-13 19:12:43

标签: java html string

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

感谢

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

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

注意:我从txt文件中获取行。 还有其他任何建议吗?!

4 个答案:

答案 0 :(得分:35)

也许这会奏效:

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

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

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

希望这有帮助。

答案 1 :(得分:8)

JSOUP

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

答案 2 :(得分:3)

您需要进行一些轻量级解析来剥离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;
}

答案 3 :(得分:-1)

import 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);
 }
}