Java过滤html文档

package com.lvtu.csa.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;

import com.lvmama.comm.pet.po.prod.ProdTag;
import com.lvmama.comm.pet.po.search.ProductSearchInfo;
import com.lvmama.comm.vo.Constant;

/**
 *
 * @author dengcheng
 *
 */
public class ClientUtils {
    /**
     * 过滤html文档
     *
     * @param inputString
     * @return
     */
    public static String filterOutHTMLTags(String inputString) {
        if (StringUtils.isEmpty(inputString)) {
            return "";
        }
        String htmlStr = inputString; // 含html标签的字符串
        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 {
            String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>
                                                                                                        // //
                                                                                                        // }
            String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>
            String regEx_html = "<[^>]+>|&nbsp;|&amp;|nbsp;|nbsp"; // 定义HTML标签的正则表达式

            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); // 过滤script标签

            p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
            m_style = p_style.matcher(htmlStr);
            htmlStr = m_style.replaceAll(""); // 过滤style标签

            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll(""); // 过滤html标签

            textStr = htmlStr;
        } catch (Exception e) {
            System.err.println("Super_clutter ClientUtils Html2Text: "
                    + e.getMessage());
        }
        return replaceAllN(textStr);// 返回文本字符串
    }
    
    /**
     * 是否支持多订多惠,早定早恵
     * @param psi ProductSearchInfo
     * @return boolean
     */
    public static boolean hasBusinessCoupon(ProductSearchInfo psi) {
        if(null == psi) {
            return false;
        }
        Map<String,Object> m = getPreferentialTags(psi.getTagList());
        if(null != m && null !=m.get("hasBusinessCoupon") ) {
            return Boolean.parseBoolean(m.get("hasBusinessCoupon").toString());
        }
        return false;
        
    }
    
    /**
     * 获取优惠信息tags .
     * @param ProductSearchInfo psi
     * @return map
     */
    private static Map<String,Object> getPreferentialTags(List<ProdTag> plist) {
        Map <String,Object> refMap = new HashMap<String,Object>();
        //用于前台页面显示Tag
        String preferentialInfo="";// 优惠信息,抵扣信息
        String preferentialTags="";
        boolean hasBusinessCoupon = false; // 是否支持多订多惠 ,早定早惠
        boolean canDeduction = false; // 是否支持奖金抵扣 ,积分抵用
        String favourableDesc = ""; // 优惠信息
        String deductionDesc = ""; // 抵扣信息
        //取ProductSeachInfo上的tag信息由于页面显示
        if(null != plist && plist.size() > 0) {
            for(int i = 0 ;i < plist.size() ;i++) {
                ProdTag pt = plist.get(i);
                /*EARLY("早订早惠"),
                MORE("多订多惠"),
                BONUS_PAY("奖金抵扣"),
                POINT_PAY("积分抵用"),
                BANK_ACTIVITY("银行活动"),
                SALES_PROMOTION("促销"),
                APERIODIC("期票");*/
                
                // EARLY("早订早惠")
                if(Constant.PROD_TAG_NAME.EARLY.getCnName().equals(pt.getTagName())) {
                    hasBusinessCoupon = true;
                    preferentialInfo = getTagNames(preferentialInfo,pt.getTagName());
                    favourableDesc = getTagNames(favourableDesc,pt.getTagName());
                    preferentialTags = preferentialTags + "2," ;
                // MORE("多订多惠")
                } else if(Constant.PROD_TAG_NAME.MORE.getCnName().equals(pt.getTagName())) {
                    hasBusinessCoupon = true;
                    preferentialInfo = getTagNames(preferentialInfo,pt.getTagName());
                    favourableDesc =  getTagNames(favourableDesc,pt.getTagName());
                    preferentialTags = preferentialTags + "3," ;
                // BONUS_PAY("奖金抵扣")
                } else if(Constant.PROD_TAG_NAME.BONUS_PAY.getCnName().equals(pt.getTagName())) {
                    canDeduction = true;
                    preferentialInfo = getTagNames(preferentialInfo,pt.getTagName());
                    deductionDesc = getTagNames(deductionDesc,pt.getTagName());
                    preferentialTags = preferentialTags + "1," ;
                // POINT_PAY("积分抵用")                    
                } else if(Constant.PROD_TAG_NAME.POINT_PAY.getCnName().equals(pt.getTagName())) {
                    canDeduction = true;
                    preferentialInfo = getTagNames(preferentialInfo,pt.getTagName());
                    deductionDesc = getTagNames(deductionDesc,pt.getTagName());
                    preferentialTags = preferentialTags + "4," ;
                }
            }
        }
        refMap.put("info", preferentialInfo);
        refMap.put("deductionDesc", deductionDesc);
        refMap.put("favourableDesc", favourableDesc);
        refMap.put("tags", preferentialTags);
        refMap.put("hasBusinessCoupon", hasBusinessCoupon);
        refMap.put("canDeduction", canDeduction);
        
        return refMap;
    }
    
    /**
     *
     * @param desc
     * @param tagName
     * @return
     */
    public static String getTagNames(String desc,String tagName) {
        return ("".equals(desc)?tagName:(desc+"•"+tagName));
    }
    
    /**
     * 使用java正则表达式去掉多余的.与0
     * @param s
     * @return  
     */  
    public static String subZeroAndDot(String s){  
        if(s.indexOf(".") > 0){  
            s = s.replaceAll("0+?$", "");//去掉多余的0  
            s = s.replaceAll("[.]$", "");//如最后一位是.则去掉  
        }  
        return s;  
    }  

    /**
     * 去掉字符串中重复的/n,把多个/n合并成一个.
     *
     * @param str
     * @return
     */
    public static String replaceAllN(String str) {
        if (StringUtils.isEmpty(str)) {
            return "";
        }
        str = str.replaceAll(" +", "").replaceAll("\\n+", "\n");
        // 如果第一个字符是/n ,则去掉 /n
        if (str.indexOf("\n") == 0) {
            str = str.replaceFirst("\n", "");
        }
        return str;
    }
    
    /**
     * 截取产品名称,最多50个中文
     * @param productName
     * @return
     */
    public static String subProductName(String productName) {
        if(StringUtils.isEmpty(productName)) {
            return "";
        }
        try {
            if(productName.length() > 47) {
                productName = productName.substring(0,47) + "...";
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
        
        return productName;
    }
    
    public static Long getAppVersion(String lvvserion){
        return Long.valueOf(lvvserion.replaceAll("[.]", ""));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值