ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java 从html中提取纯文本

2021-08-28 13:31:15  阅读:212  来源: 互联网

标签:style Java String script Pattern replaceAll html 文本


1、做门户网站需要在首页展示文章的摘要部分,数据库存储的是带标签的内容,展示在前台需要将html标签处理一下

2、解决方式:

一、replaceAll  与正则表达式

//从html中提取纯文本  
public static String StripHT(String strHtml) {  
     //剔出<html>的标签  
     String txtcontent = strHtml.replaceAll("</?[^>]+>", "");   
     //去除字符串中的空格,回车,换行符,制表符    
     txtcontent = txtcontent.replaceAll("<a>\\s*|\t|\r|\n</a>", "");
     return txtcontent;  
}  

二:正则表达式

 //从html中提取纯文本
    public static String Html2Text(String inputString) {
        // 含html标签的字符串
        String htmlStr = inputString;
        String textStr = "";
        java.util.regex.Pattern p_script;
        java.util.regex.Matcher m_script;
        java.util.regex.Pattern p_style;
        java.util.regex.Matcher m_style;
        java.util.regex.Pattern p_html;
        java.util.regex.Matcher m_html;
        try {
            // 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
            // 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
            // 定义HTML标签的正则表达式
            String regEx_html = "<[^>]+>";
            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            // 过滤script标签
            htmlStr = m_script.replaceAll("");
            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            // 过滤style标签
            htmlStr = m_style.replaceAll("");
            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            // 过滤html标签
            htmlStr = m_html.replaceAll("");
            textStr = htmlStr;
        } catch (Exception e) {System.err.println("Html2Text: " + e.getMessage()); }
        //剔除空格行
        textStr=textStr.replaceAll("[ ]+", " ");
        textStr=textStr.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
        // 返回文本字符串
        return textStr;
    } 

三:HTMLEditorKit.ParserCallback,Java自带的类

public class HtmlToText extends HTMLEditorKit.ParserCallback {

    StringBuffer s;

    public void parse(Reader in) throws IOException {
        s = new StringBuffer();
        ParserDelegator delegator = new ParserDelegator();
        // the third parameter is TRUE to ignore charset directive
        delegator.parse(in, this, Boolean.TRUE);
    }

    @Override
    public void handleText(char[] text, int pos) {
        s.append(text);
    }

    public String getText() {
        return s.toString();
    }

    public static void main(String[] args) {

        String str = "<div id=\"xw_box\"> \n" +
                " <p class=\"mt20 yahei fz12\" style=\"font-size: 14px; margin-top: -28px; text-align: right;\"><em>字号:\n"+
          " <a onclick=\"changeSize('16px');return false;\" href=\"#\">大</a> <a onclick=\"changeSize('14px');return false;\" href=\"#\">中</a></em></p> \n" +
                " <p style=\"text-indent: 2em;\"></p> \n" +
                " <p style=\"text-indent: 2em;\">Java是一门面向对象编程语言,\n" +
          " 不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、\n" +
          " 指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,\n" + 
          " 极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程</p> \n" +
                " <p style=\"text-indent: 2em;\">20世纪90年代,硬件领域出现了单片式计算机系统,\n" +
           " 这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品\n" + 
           " (如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,\n" + 
           " 帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,\n" +
          " 专攻计算机在家电产品上的嵌入式应用。</p> \n" +
                " <p style=\"text-indent: 2em;\"></p> \n" +
                "</div>";

        //输入流
        InputStream myIn=new ByteArrayInputStream(str.getBytes());
        //将System.in转化为面向字符的流
        InputStreamReader ir = new InputStreamReader(myIn);
        try {
            // the HTML to convert
            //Reader in=new StringReader("string");
            HtmlToText parser = new HtmlToText();
            parser.parse(ir);
           ir.close();
           System.out.println(parser.getText());
     }  catch (Exception e) {
           e.printStackTrace();
     }
 } 

}        

  

参考:https://blog.csdn.net/m0_37712901/article/details/76615381 

标签:style,Java,String,script,Pattern,replaceAll,html,文本
来源: https://www.cnblogs.com/wongzzh/p/15192966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有